今天在一個技術(shù)交流群里面看到了釋放池的使用場景搂漠。算是解除了我的困惑森缠。
在for循環(huán)里楣富,創(chuàng)建的臨時變量并不會隨著一次循環(huán)的完成而自動釋放寄疏。
所以當(dāng)你在循環(huán)里處理大文件時就會導(dǎo)致內(nèi)存達到峰值。
具體用法
for (int i=0;i<100000;i++) {
@autoreleasepool {
UIImage *image = [UIImage imageNamed:@"pic"];
}
}
每一次循環(huán)結(jié)束灯荧,image這個臨時變量就會銷毀礁击。
而不使用@autoreleasepool,則對象的銷毀會在這個runloop結(jié)束之后。
蘋果建議使用場景:
1哆窿、寫基于命令行的的程序時链烈,就是沒有UI框架,如AppKit等Cocoa框架時更耻。
2测垛、寫循環(huán)捏膨,循環(huán)里面包含了大量臨時創(chuàng)建的對象秧均。(本文的例子)
3、創(chuàng)建了新的線程号涯。(非Cocoa程序創(chuàng)建線程時才需要)
4目胡、長時間在后臺運行的任務(wù)。