在开发者文档,它说:定期在长时间运行的后台线程上耗尽自动释放池的最佳方法?
如果您的应用程序或线程是长期存在的和潜在的产生有很多自动释放的对象,你应该定期排出,并创建自动释放池(如应用程序套件确实在主线);否则,自动释放的对象会累积并且内存占用量会增加。但是,如果您的分离线程不进行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次将会耗尽自动释放池并创建一个新池。我每次在该线程中执行一个方法(使用performSelector:onThread :)时,我可以创建一个autorelease池,然后在方法结束时释放它。
3)制作一个计时器,以便一个池被排空,然后定期创建。
我认为选择1是最好的,但想知道是否有不同的方式,我应该这样做。谢谢!
我认为在wwdc 10中有关于 – RolandasR 2010-09-27 19:25:16