在开发人员文档中,它说:
如果您的应用程序或线程是长期存在的并且可能会生成大量自动释放对象,您应该定期排空并创建自动释放池(就像 Application Kit 在主线程上所做的那样);否则,自动释放的对象会累积并且您的内存占用会增加。但是,如果您的分离线程不进行 Cocoa 调用,则不需要创建自动释放池。
我想知道最好的方法是什么。我有几种我认为可行的方法,但不知道哪个是“最好的”。我目前有一个方法可以启动线程并让它等待操作执行:
- (void)startThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
accessoryRunLoop = [NSRunLoop currentRunLoop];
//Add a dummy port to avoid exiting the thread due to no ports being found
[accessoryRunLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while(accessoryThreadIsRunning)
{
//Keep the thread running until accessoryTheadIsRunning == NO
[accessoryRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
[pool release];
}
我能想到的选择是:
1)在while(accessoryThreadIsRunning)中添加一个计数器,这样每50或100次它就会耗尽自动释放池并创建一个新的。
2)每次我在那个线程中执行一个方法(使用performSelector:onThread:),我可以创建一个自动释放池,然后在方法结束时释放它。
3)制作一个计时器,以便将池排空然后定期创建。
我认为选项 1 是最好的,但想知道是否有不同的方式我应该这样做。谢谢!