可能重复:
为什么要使用自动释放池?
所有的Objective-C起始页面在主函数声明下方都会有一个默认的@autoreleasepool{...}
语句。但这个语句实际上是做什么的呢?新的Objective-C版本会自动释放对象,而删除这行代码对程序没有影响。这个命令真的必要吗?
可能重复:
为什么要使用自动释放池?
所有的Objective-C起始页面在主函数声明下方都会有一个默认的@autoreleasepool{...}
语句。但这个语句实际上是做什么的呢?新的Objective-C版本会自动释放对象,而删除这行代码对程序没有影响。这个命令真的必要吗?
@autoreleasepool
语句所做的工作与使用NSAutoreleasePool类时相同。NSAutoreleasePool的工作方式有些奇怪,因为创建它会在整个应用程序中产生影响;@autoreleasepool
创建一个作用域范围,并清晰地表明了池内的内容和何时排放(当它超出范围时)。根据苹果公司的说法,它还更加高效。NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease];
),它将在那个时间点上具有+1的保留计数,但在运行循环结束时,池被排空,任何标记为自动释放的对象都将其保留计数减少。这是一种在您为自己准备什么将保留它的东西之前使对象保持活动状态的方法。autorelease
方法,但管理ARC的底层系统会为您插入它。请记住:ARC所做的一切只是在适当的时间为您插入retain
、release
和autorelease
调用。因此,现有的AutoreleasePool概念需要继续存在。