Autoreleasepool 自動釋放池的用法

2021-09-24 22:10:36 字數 824 閱讀 1989

隨著開發的年限越來越久,越覺得應該知其然更要知其所以然。

不光要用**,還有知道為什麼用,到底為什麼用。

下面我們就說一下autoreleasepool 自動釋放池的使用者

現在我們大多數情況下開發都是用arc

@autoreleasepool
這相當於mrc下:

nsautoreleasepool *pool = [[nsautoreleasepool alloc] init;

class *s = [[class alloc] init];

[pool drain];

其實作用就是將物件加入自動釋放池。

很多小夥伴這時候就有疑問了,我不加也可以啊。

autoreleasepool用法:

很多時候我們需要做一些迴圈操作。看下面最簡單的這簡單的**

int number = 15;

for (int i = 0; i < number; i++)

綜上:

上邊的**for迴圈生成的nsstring物件會無法及時釋放,造成瞬時記憶體占用過大

解決辦法,每次迴圈時都手動建立乙個區域性釋放池,及時建立,及時釋放,這樣nsstring物件就會及時得到釋放

for (int i = 0; i < largenumber; i++) 

}

更多使用方法:

在for迴圈大量使用imagenamed:之類的方法生成uiimage物件可能是個更要命的事情,記憶體隨時可能因為占用過多被系統殺掉。

自動釋放池 Autorelease Pools

自動釋放池 autorelease pools 每個執行緒都維護它自己的 nsautoreleasepool 的棧物件。cocoa 希望在每個當前 執行緒的棧裡面有乙個可用的自動釋放池。如果乙個自動釋放池不可用,物件將不會給釋放,從而造成記憶體洩露。對於 的主線程通常它會自動建立並消耗乙個自動釋放池...

自動釋放池autoreleasepool

物件存入到自動釋放池中,當這個池子被銷毀的時候,他都會對池子中的所有的物件進行一次release操作 1 怎麼把物件存到池子中 自動釋放池,大括號代表池子的作用域,可以自己隨意建立 只有在自動釋放池的作用域中呼叫物件的autorelease方法才能夠正確地將物件放入到池子中 autoreleasep...

關於 autoreleasepool的測試及使用

void dosomething nslog finished void dosomething nslog finished 綜上,當需要在程式中建立大量的臨時變數時 大量也可指數量多,不確定,比如從資料庫中讀取資料時 很容易使記憶體產生峰值又回到記憶體低谷,這樣對程式的效能會產生很大影響,而使用...