了解Objective-C中NSAutoreleasePool使用方法
本文的目的是來了解Objective-C中NSAutoreleasePool使用方法,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的內容介紹完了,希望本文對你有所幫助!