iOS中正確處理dealloc方法

2021-06-08 13:53:27 字數 991 閱讀 7433

當我們繼承類的時候,子類例項在構造的時候順序是先高用父類的構造方法,再呼叫子類的構造方法。在c/c++是如此,在objc中也是如此,在ios開發中,我們會看到這樣的**:

1.- (void)init 

2. 

8. 

9.    return self;  10.} 

看到沒,初始化的時候都是先呼叫父類的初始化方法,為什麼呢,因為父類更老,當然是先出生了。,同樣的情況可以在viewdidload中看到。

而銷毀的時候則是相反的順序,先銷毀子類裡分配的空間,再銷毀父類的。如:

1.- (void)dealloc  

為什麼會是這個順序呢?因為長江後浪推前浪,子類是繼承了父類的優點,發揮了自己長外, 敵人要想消滅對方,當然是先滅最強的,都說樹大招風,就是這個道理。在銷毀的時候如果不按這個順序,有時候可能會crash。如在子類中應用了:

1.[outputstream setdelegate:self]; 

2.[outputstream scheduleinrunloop:[nsrunloop currentrunloop] formode:nsdefaultrunloopmode]; 

如果dealloc寫這成這樣就會在removefromrunloop的時候crash:

1.- (void)dealloc  

10.    delegate = nil; 

11.} 

如果寫成這樣就ok了:

1.- (void)dealloc  

9.    delegate = nil; 

10.    [super dealloc]; // must be last!   11.} 

在xcode version:4.2.1及以前版本中開發ios的時候,如果將super dealloc寫在子類dealloc中前面的時候是不會出錯的,但在xcode version4.3.2中,它會有自動檢測super dealloc的功能,如果寫在前面,則會crash.

正確處理 Memory Warning

我們知道,建立viewcontroller時,執行順序是loadview viewdidload。當收到記憶體警告時,如果viewcontroller未顯示 在後台 會執行didreceivememorywarning viewdidunload 如果viewcontroller當前正在顯示 在前台...

如何正確處理事情

從周一回去,到今天回來,正好四天。這次父親的手術,中間出現了事故,碰破了動脈血管,造成大出血達到3600ml,幾乎是全身的血量。而且山化醫院沒有血,潞城也沒有,幸好有人及時從長治送血回來,才挽救了父親的生命。還有尿管插的不好,造成尿道損傷的問題。切除腎是乙個大手術,存在較大的風險,而在山化這樣醫療條...

查詢條件未正確處理

rmusecredittx.intentupletterflag 2 and rmusecredittx.epolicyuploadsize 5 and hqlqueryrule.addin rmusecredittx.epolicyuploadflag 0,3 split 錯誤現象 只能查到epo...