根据这个苹果页面,我读到在POSIX线程上与Cocoa交互时,我应该创建一个NSAutoreleasePool
。
如果您在Application Kit的main之外进行Cocoa调用线程——例如,如果您创建了一个仅限Foundation的应用程序,或者分离一个线程——您需要创建自己的自动释放池。
不幸的是,在ARC中不允许使用NSAutoreleasePool
。
那么,我应该怎么做才能保证始终有一个池可用于任何自动发布的ARC代码?
谢谢!
使用@autoreleasepool
。
@autoreleasepool
{
// make Cocoa calls here
}
这允许编译器正确地推断跨越池边界的对象的生存期,这是ARC的要求。(这就是为什么不能使用NSAutoreleasePool
的原因。)此外,它还更快。