iOS開發進階面試題-ARC下dealloc的作用

來源:互聯網
上載者:User

標籤: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的作用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.