2012-08-10 73 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

相關問題