2009-01-15 60 views

回答

3

找到了答案(您可以使用這些語句來實現這一點):

[NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil]; 

OR

NSThread *myThread = [[NSThread alloc] initWithTarget:self 
        selector:@selector(myThreadMainMethod:) 
        object:nil]; 
[myThreadstart]; 
4

另一種方法是

[someObject performSelectorInBackground:@selector(someSelector:) 
     withObject:nil]; 

克里斯。

2

如果您已經創建了一個NSThread和你扶住NSThread對象,隨後就可以發送更多的消息,該線程使用進行:

–[NSObject performSelector:onThread:withObject:waitUntilDone:] 
1

你需要一個新的自動釋放池處理該線程中的所有自動釋放。主線程有一個在你到達代碼之前由框架自動創建的線程。

還要確保您是否在做任何接口更新,並將其委託給主線程。更新可能會或可能不會工作,如果你不

[self performSelectorOnMainThread:@selector(someSelector:) 
       withObject:passedInObject waitUntilDone:NO]; 

chris。

2

找到了答案,以我自己的問題:

當我開始在 單獨的線程的新方法,爲什麼我需要在 方法的 NSAutoreleasePool對象?如果我不添加它,我會在日誌中獲得一個 Pool Stack。

自動釋放池和線程(MemoryMgmt.pdf從Apple.com):

在Cocoa應用程序中的每個線程 維護自己的 NSAutoreleasePool對象的堆棧。當 線程終止時,它會自動釋放與其自身關聯的所有自動釋放池 。自動發佈 池自動創建和 銷燬主線程 應用程序基於應用程序 套件,所以你的代碼通常不會 必須在那裏處理它們。如果您在 應用套件的主線程 以外撥打可可電話,您需要創建自己的 自動釋放池。如果您正在編寫僅基金會 應用程序或如果您分離線程,則這種情況是 。

相關問題