讀書筆記 iOS 自動釋放池

2021-09-25 20:02:18 字數 578 閱讀 5118

一,nsobject類提供了乙個autorelease方法:

-(id)autorelease;

該方法預先設定了一條將來在某個時間傳送的release訊息,其返回值是接收訊息的物件。retain訊息採用了相同的技術,使巢狀呼叫更加容易。當給乙個物件傳送autorelease訊息時,實際上是將該物件新增到nsautoreleasepool中。當自動釋放池被銷毀時,會向該池中所有物件傳送release訊息。

二,nsautoreleasepool *pool;

pool=[[nsautoreleasepool alloc]init];

...[pool release];

建立乙個自動釋放池時,該池自動成為活動的池。釋放該池時,其保留計數器值歸0,然後,該池被銷毀。在銷毀過程中,該池釋放其包含的所有物件。

三,你可能已經在xcode的自動生成**中遇見過另一種銷毀自動釋放池中物件的方式:-drain方法。該方法只是清空自動釋放池而不銷毀它。-drain方法只適用於mac os x 10.4及更高版本。在我們自己編寫(而不是由xcode生成)的**中,我們使用-release方法,因為該方法適用於mac os的所有版本。

讀書筆記 iOS 自動釋放池

一,nsobject類提供了乙個autorelease方法 id autorelease 該方法預先設定了一條將來在某個時間傳送的release訊息,其返回值是接收訊息的物件。retain訊息採用了相同的技術,使巢狀呼叫更加容易。當給乙個物件傳送autorelease訊息時,實際上是將該物件新增到n...

自動釋放池

自動釋放池是什麼時候建立的?又是什麼時候銷毀的?原題 思考 1,有返回值的類方法建立出來的物件都是autorelease的。autorelease物件出了作用域後,就會被新增到自動釋放池中。如果largenumber非常大,有可能在乙個for中就把自動釋放池填滿,記憶體消耗非常大!2,解決方案 在f...

自動釋放池

autorelease本質上就是延遲呼叫release方法 autorelease物件什麼時候釋放?引用計數為0的時候才會釋放,不是出了pool就釋放 在一些很消耗記憶體的迴圈呼叫的場景下有時需要手動干預autoreleased物件的釋放時機,不然會導致記憶體暴增,最終導致程式崩潰 nsthread...