POSIX回调和带有ARC的NSAutoreleasePool



根据这个苹果页面,我读到在POSIX线程上与Cocoa交互时,我应该创建一个NSAutoreleasePool

如果您在Application Kit的main之外进行Cocoa调用线程——例如,如果您创建了一个仅限Foundation的应用程序,或者分离一个线程——您需要创建自己的自动释放池。

不幸的是,在ARC中不允许使用NSAutoreleasePool

那么,我应该怎么做才能保证始终有一个池可用于任何自动发布的ARC代码?

谢谢!

使用@autoreleasepool

@autoreleasepool
{
    // make Cocoa calls here
}

这允许编译器正确地推断跨越池边界的对象的生存期,这是ARC的要求。(这就是为什么不能使用NSAutoreleasePool的原因。)此外,它还更快。

最新更新