瞭解Objective-C中NSAutoreleasePool使用方法

來源:互聯網
上載者:User

標籤:

本文的目的是來瞭解Objective-CNSAutoreleasePool使用方法,Objective-C的Foundation庫實際上是種運行級對象系統,與一般的對象語言,例如C++,Java不一樣,而與COM或者Corba一樣,對象,不一定建立在使用者應用程式的地址空間中,有可能是建立在另一個地址空間中,甚至建立在別的機器上!

所以,Objective-C的對象(全部繼承自NSObject),就是使用引用計數的方法來管理對象的存活,眾所周知,當引用計數為0時,對象就被銷毀了。操作非常簡單,當對象被建立時,引用計數被設成1。可以給對象發送retain訊息,讓對象對自己的引用計數加1。

而當對象接受到release訊息時,對象就會對自己的引用計數進行減1,當引用計數到了0,對象就會呼叫自己的dealloc處理,一切都需要程式員親力親為,一點馬虎不得。

可是,NSAutoreleasePool是什嗎?它實際上是個對象引用計數自動處理器。

首先,NSAutoreleasePool可以同時有多個,它的組織是個棧,總是存在一個棧頂pool,也就是當前pool,每建立一個pool,就往棧裡壓一個,改變當前pool為建立的pool,然後,每次給pool發送drain訊息,就彈出棧頂的pool,改當前pool為棧裡的下一個pool。

接下來要注意,對象,並不是自動被加入到當前pool中,而是需要對對象發送autorelease訊息,這樣,對象就被加到當前pool的管理裡了。

噹噹前pool接受到drain訊息時,它就簡單的對它所管理的所有對象發送release訊息。

到了這裡,一定會發現這個所謂的pool有個坑人的特性,即,如果pool中被管理的對象接受到pool發送的那個release訊息後,它的引用計數大於0,那麼pool雖然消失了,但是那個對象還是存在的!

瞭解Objective-C中NSAutoreleasePool使用方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.