當對象引用降為0(此時retainCount不一定為零,由于優(yōu)化retainCount沒有執(zhí)行-1,對象直接釋放)的時候,對象會被釋放。但是具體何時釋放,無法保證
dealloc 應(yīng)該執(zhí)行那些操作
1.清理觀測行為(移除通知,鍵值觀測)
2.釋放對象擁有的引用,比如釋放一些非Objective-C對象
dealloc 不應(yīng)該執(zhí)行那些操作
1.開銷過大或系統(tǒng)稀缺的資源,例如文件描述符、套接字、大塊內(nèi)存等。這些資源不應(yīng)該保留過長時間。不過可以利用dealloc方法防止忘記清理這些資源
2.不要在dealloc里誰便調(diào)用其他方法。如果調(diào)用的方法執(zhí)行某些異步任務(wù),那么等到任務(wù)結(jié)束時,系統(tǒng)已經(jīng)銷毀了這個對象。這很容易引起應(yīng)用崩潰(因為已經(jīng)無法回調(diào)到此對象);調(diào)用自己的方法自己的方法,因為對象處于正在回收狀態(tài)
了解更多請參考:Effective Objective-C 2.0 第31條