在OC的引用計數的架構中,有一特性叫做“自動釋放池”。釋放對象的方式有兩種:1、一種是調用release方法,該方法使其保留計數立即遞減;2、調用autorelease方法,將其加入“自動釋放池中”。自動釋放池用于存放哪些需要在稍后某個時刻釋放的對象。清空自動緩存池時,系統會向其中的對象發送release消息。
創建自動釋放池的語法如下:
@autoreleasepool{
//.........
}
自動釋放池一般不用自己手動創建,在main函數中存在如下的自動緩存池標識:
但是有時我們可以手動創建自動釋放池,考慮如下這段代碼:
這樣一來,在執行for循環時,應用的程序內存占有量會持續上漲,而等到所有臨時對象都釋放后,內存用量又會突然降下來。
帶有自動釋放池的循環
如果把循環內的代碼包裹在”自動釋放池“中,那么在循環中自動釋放的對象就會放在這個池中而不是線程的主自動釋放池中。 應用程序在執行循環時的內存峰值就會降低。
自動釋放池機制類似于”棧“,系統創建好自動釋放池之后,就將其推入棧中,而清空自動釋放池時,則相當于將其走棧中彈出。