zombie objects物件研究
一、xcode 關閉arc
project -> build settings 搜尋 automatic reference counting 設定為no
二、開啟 殭屍物件 選項
三、**驗證
- (voida.關閉arc,關閉殭屍物件選項時)viewdidload
- (nsstring*)classname:(id
)obj
[person release];執行後,person物件會自動執行dealloc方法。因為scheme中關閉了殭屍物件選項,所以person物件釋放後並不會生成殭屍物件
列印結果:
2016-12-27b.關閉arc,開啟殭屍物件選項時15:37:56.769 zomobj[5515:213898] person:person----viewdidload
在[person release];之前
person物件為person類,正常使用
在[person release];之後
person物件被釋放了,由於scheme開啟了殭屍物件選項,所以person物件在釋放時呼叫的dealloc方法在底層被swizzle了
dealloc方法執行時,**走的並不是清理資源,**記憶體。而是copy了乙個nszombie物件模版,並修改zimbie物件的isa指標,形成了乙個新的殭屍物件類_nszombie_person。所以在[person release];執行之後, 列印的person物件型別為_nszombie_person
_nszombie_person類中只有乙個isa指標,裡面沒有其他的屬性和方法,所以不能響應任何事件,所以在向這個殭屍物件傳送訊息時,就會報錯,並列印出來。這非常有利於除錯。
列印結果:
2016-12-2715:48:20.006 zomobj[5624:218915] person:person----viewdidload
2016-12-27
15:48:20.006 zomobj[5624:218915
] person:_nszombie_person
2016-12-27
15:48:20.007 zomobj[5624:218915] *** -[person setname:]: message sent to deallocated instance 0x6000000161d0
message from debugger: terminated due to signal
9
iOS 殭屍物件除錯
近來,發現xcode的模擬器越來越不靠不住了,應用開發完,在模擬器上面各種流暢各種執行得飛起,但是安裝到真機之後,就崩潰了,是閃退啊!o 為了迅速定位並解決問題,最終還是選擇了方法三,並且最終解決了問題。從xcode7之後,真機除錯已經是沒有任何門檻了,我們只需要註冊乙個蘋果的開發者賬號即可以無證書...
iOS之物件儲存
ios中對於資料的儲存通常使用sqlite或者coredata,也有部分使用檔案儲存的方式。ios中的nsarray nsstring nsdictionary nsdata等常規的資料物件都可以使用writetofile atomically 方法 注 這裡nsarray中的物件必須是些ios中的...
AgoBot 殭屍網路研究筆記(一)
由於工作需要,著手分析乙個agobot的開源的程式,一些收穫或許和大家分享 email anzijin sina.com 1 源 分以下幾塊 agobot3 source agobot 主體源 重點分析這塊的 scanner source 程式內應該包含了乙個掃瞄器模組 ddos source 實現...