iOS殭屍物件之研究

2022-04-02 09:02:29 字數 1733 閱讀 4679

zombie objects物件研究

一、xcode 關閉arc

project -> build settings  搜尋 automatic reference counting      設定為no

二、開啟 殭屍物件 選項 

三、**驗證

- (void

)viewdidload

- (nsstring*)classname:(id

)obj

a.關閉arc,關閉殭屍物件選項時

[person release];執行後,person物件會自動執行dealloc方法。因為scheme中關閉了殭屍物件選項,所以person物件釋放後並不會生成殭屍物件

列印結果:

2016-12-27

15:37:56.769 zomobj[5515:213898] person:person----viewdidload

b.關閉arc,開啟殭屍物件選項時

在[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-27

15: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 實現...