今天在一个技术交流群里面看到了释放池的使用场景。算是解除了我的困惑。
在for循环里,创建的临时变量并不会随着一次循环的完成而自动释放。
所以当你在循环里处理大文件时就会导致内存达到峰值。
具体用法
for (int i=0;i<100000;i++) {
@autoreleasepool {
UIImage *image = [UIImage imageNamed:@"pic"];
}
}
每一次循环结束,image这个临时变量就会销毁。
而不使用@autoreleasepool,则对象的销毁会在这个runloop结束之后。
苹果建议使用场景:
1、写基于命令行的的程序时,就是没有UI框架,如AppKit等Cocoa框架时。
2、写循环,循环里面包含了大量临时创建的对象。(本文的例子)
3、创建了新的线程。(非Cocoa程序创建线程时才需要)
4、长时间在后台运行的任务。
网友评论