自動釋放池NSAutoReleasePool

2021-06-18 15:39:36 字數 803 閱讀 3903

nsautoreleasepool用於支援coco的引用計數記憶體管理

//使用arc時

nsautorelease *pool = [[nsautoreleasepool alloc] init];

[pool release];

//是否使用arc都可以,效率更高

@aurorelease

+ addobject;

- addobject;

新增物件到當前執行緒中有效的自動釋放池,同乙個物件可以向釋放池中新增多次,當釋放池銷毀時,對於每次新增的物件都會收到release訊息。一般我們不使用這個方法,而是通過向物件傳送aurorelease方法來代替。

- (void)drain

在引用計數環境下,作用與release一樣

自動釋放池不能retained, 所以會導致釋放池釋放

當乙個自動釋放池被銷毀時,會傳送乙個release訊息給它所有的自動釋放物件,如果乙個物件被新增多次,則每次新增的都會被銷毀 。

nsobject:

- (oneway void)release;  //引用計數器減1, 當為0時,會收到dealloc訊息,銷毀物件

- (id)autorelease;  //在當前自動釋放池結束時,引用計數器減1,即[pool drain]時銷毀物件

在建立工程時,在main函式中已經有了乙個自動釋放池

int main(int argc, char *argv)

}建立自動釋放池:

當某函式使用了大量的自動釋放物件,記憶體占用過大,會被系統中止掉,此時就需要手動新增自動釋放池來及時釋放記憶體空間。

自動釋放池

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

自動釋放池

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

自動釋放池

自動釋放池是允許你放棄對乙個物件的持有關係,但可以避免它立即被 的乙個工具,當從方法返回你的物件的時候,這個功能很有用。1 程式的入口處於在main 函式 這就意味著整個應用都在自動釋放池中,所有的物件最後都會被 int main int argc,char argv 2 autoreleasepo...