2012-08-10 77 views
0

作为标题。调用performSelector后,是否需要调用NSAutoReleasePool:withObject:afterDelay?需要在performSelector之后调用NSAutoReleasePool:withObject:afterDelay?

我认为performSelector:withObject:afterDelay:不在主线程中,所以需要添加自动释放池。那是对的吗?

例如:

[self performSelector:@selector(update) withObject:nil afterDelay:0.1]; 

-(void) update { 
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; // Is it necessary 
... 
[pool drain]; 
} 

谢谢!

回答

2

否。此方法使用为该实际运行循环安排的NSTimer,在您称之为的同一个线程/运行循环上执行提供的选择器。你不需要担心它。

0

您需要创建自己的@autoreleasepool的唯一实例是如果您一次创建和自动释放大量对象。

在你的情况下,你的update方法将在你创建它的同一个线程/ runloop上被调用,并且会在主要的@autoreleasepool下快乐地下降。

NSObject文档对您所调用的特定方法有一些罗嗦的细节。

+0

“您需要创建自己的autoreleasepool的唯一实例是如果您一次创建并自动释放大量对象。” - 那是错误的。您还需要为您分离的任何线程分别使用自动释放池。 – 2012-08-10 08:53:25

+0

@ H2CO3这是真的。然而,OP正在工作并不分离NSThreads。 – Jessedc 2012-08-10 12:10:52

相关问题