標籤:ios進階面試題 arc下dealloc的作用 dealloc下該做什麼
在MRC時代,我們需要在 dealloc中做很多,比如釋放對象,等等;
如今我們已經進入ARC時代,對於普通對象的釋放,系統已經幫我們做好了;
那是否可以高枕無憂了呢?在ARC下我們應該做什麼?
觀點:
ARC下,系統可以幫我們釋放該對象,及其包含的對象;
但是卻無法釋放不屬於該對象的一些東西,如:
1.通知的觀察者
由於通知中樞是系統的一個單例,你在註冊通知的觀察者時,實際上是在通知中樞註冊的,
這時,即使ARC下系統幫我們釋放了對象,但是在通知中樞的觀察還是沒有移除,那麼當有
該通知時,依然會嘗試調用該對象的接受通知的方法,這可能會導致一些問題.
這一點有點像,你晚上六點下班了...但是卻沒有刷卡...,
2.靜態對象強委託/引用的解除(例如XMPPMannerger的delegateQueue)
對於其他的對象來把你當做委託 delegate時,並且是 強引用時,即時你自身被釋放,但是引用你的對象依然還在,
這時需要在引用你的對象移除該delegate
3.做一些其他的操作
一個對象,如一個ViewController在銷毀之前有可能需要和server打交道;
這時我們也可以在dealloc中寫
關於dealloc的底層實現,可以參照objc運行時代碼
樣本,ARC下我們應該做的:
- (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self];//移除通知觀察者 [[XMPPManager sharedManager] removeFromDelegateQueue:self];//移除委託引用 [ [MyClass shareInstance] doSomething ]//其他動作 }
ARC下我們沒必要做的
- (void)dealloc{ _name = nil; [_time invalid];}
總結: dealloc在ARC下的作用就是釋放 系統無法釋放的該對象佔用的資源,或者其他對象對該對象的引用.
原文出自:http://blog.csdn.net/yangbingbinga/
iOS開發進階面試題-ARC下dealloc的作用