为什么ARC仍然需要@autoreleasepool?
在大多数情况下使用ARC(自动引用计数),我们不需要考虑使用Objective-C对象的内存管理。不允许再创建NSAutoreleasePool
s,但是有一个新的语法:
@autoreleasepool { …}
我的问题是,当我不应该手动释放/自动释放时,为什么我需要这个呢?
编辑:总结我从所有的答案和评论中得到的简洁:
新语法:
@autoreleasepool { … }
是新的语法
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];…[pool drain];
更重要的是:
ARC使用autorelease
以及release
。
它需要一个自动释放池才能这样做。
ARC不会为您创建自动释放池。然而:
每个Cocoa应用程序的主线程都有一个自动释放池。
有两种情况你可能想要使用@autoreleasepool
:
当您在辅助线程中并且没有自动释放池时,您必须自己制作以防止泄漏,例如myRunLoop(…) { @autoreleasepool { … } return success; }
。
当你想创建一个更本地的游泳池时,正如@mattjgalloway在他的回答中所示。