为什么ARC仍然需要@autoreleasepool?

为什么ARC仍然需要@autoreleasepool?

在大多数情况下使用ARC(自动引用计数),我们不需要考虑使用Objective-C对象的内存管理。不允许再创建NSAutoreleasePools,但是有一个新的语法:

@autoreleasepool {
    …}

我的问题是,当我不应该手动释放/自动释放时,为什么我需要这个呢?


编辑:总结我从所有的答案和评论中得到的简洁:

新语法:

@autoreleasepool { … } 是新的语法

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];…[pool drain];

更重要的是:

  • ARC使用autorelease以及release

  • 它需要一个自动释放池才能这样做。

  • ARC不会为您创建自动释放池。然而:

    • 每个Cocoa应用程序的主线程都有一个自动释放池。

  • 有两种情况你可能想要使用@autoreleasepool

    1. 当您在辅助线程中并且没有自动释放池时,您必须自己制作以防止泄漏,例如myRunLoop(…) { @autoreleasepool { … } return success; }

    2. 当你想创建一个更本地的游泳池时,正如@mattjgalloway在他的回答中所示。


千万里不及你
浏览 1415回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP