在ARC内存管理模式下,使用 autoreleasepool 主要来避免频繁申请/释放内存,从页达到优化内存的效果。
根据 Apple的文档(https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html),使用场景如下:
1、写基于命令行的的程序时,就是没有UI框架,如AppKit等Cocoa框架时;
2、写循环,循环里面包含了大量临时创建的对象;
3、创建了新的线程(非Cocoa程序创建线程时才需要);
4、长时间在后台运行的任务。
效果图:
代码示例:
- (void)withAutoreleasepoolClick
{
NSString *text = @"text:";
for (int i = 0; i < 2000; i++)
{
@autoreleasepool {
NSNumber *number = [NSNumber numberWithInt:i];
NSString *string = [NSString stringWithFormat:@"%@", number];
text = [text stringByAppendingFormat:@"%@ &", string];
}
}
NSLog(@"%@", text);
}
- (void)withoutAutoreleasepoolClick
{
NSString *text = @"text:";
for (int i = 0; i < 2000; i++)
{
NSNumber *number = [NSNumber numberWithInt:i];
NSString *string = [NSString stringWithFormat:@"%@", number];
text = [text stringByAppendingFormat:@"%@ &", string];
}
NSLog(@"%@", text);
}