用“自動釋放池”降低內存峰值

在OC的引用計數的架構中,有一特性叫做“自動釋放池”。釋放對象的方式有兩種:1、一種是調用release方法,該方法使其保留計數立即遞減;2、調用autorelease方法,將其加入“自動釋放池中”。自動釋放池用于存放哪些需要在稍后某個時刻釋放的對象。清空自動緩存池時,系統會向其中的對象發送release消息。

創建自動釋放池的語法如下:

@autoreleasepool{

//.........

}

自動釋放池一般不用自己手動創建,在main函數中存在如下的自動緩存池標識:


但是有時我們可以手動創建自動釋放池,考慮如下這段代碼:


這樣一來,在執行for循環時,應用的程序內存占有量會持續上漲,而等到所有臨時對象都釋放后,內存用量又會突然降下來。

帶有自動釋放池的循環

如果把循環內的代碼包裹在”自動釋放池“中,那么在循環中自動釋放的對象就會放在這個池中而不是線程的主自動釋放池中。 應用程序在執行循環時的內存峰值就會降低。

自動釋放池機制類似于”棧“,系統創建好自動釋放池之后,就將其推入棧中,而清空自動釋放池時,則相當于將其走棧中彈出。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 內存管理 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,008評論 1 16
  • 29.理解引用計數 Objective-C語言使用引用計數來管理內存,也就是說,每個對象都有個可以遞增或遞減的計數...
    Code_Ninja閱讀 1,532評論 1 3
  • Objective-C對象的生命期取決于其引用的計數。在Objective-C的引用計數構架中,有一種特征叫做“自...
    燃燒的木頭閱讀 1,940評論 3 2
  • 11.看下面的程序,第一個NSLog會輸出什么?這時str的retainCount是多少?第二個和第三個呢? 為什...
    AlanGe閱讀 747評論 1 4
  • iOS內存管理 概述 什么是內存管理 應用程序內存管理是在程序運行時分配內存(比如創建一個對象,會增加內存占用)與...
    蚊香醬閱讀 5,760評論 8 119