2011-06-30 34 views
9

他們似乎執行了一個相當類似的任務:啓動一個快速簡單地執行該選擇器的新線程。但是有什麼區別嗎?也許關於內存管理?+ [NSThread detachNewThreadSelector:toTarget:withObject:]和 - [NSObject performSelectorInBackground:withObject:]之間的區別是什麼?

+1

好問題。我會說,'perfomSelectorInBackground'可重用從池中的線程(通過'libdispatch'),但該文檔明確地說,這將創建一個新的線程。所以是的,它看起來和'NSThread'方法完全一樣...... –

回答

4

兩者都是相同的。

在iOS和Mac OS X v10.5及更高版本中,所有對象都能夠生成一個新線程並使用它來執行其中一個方法。 performSelectorInBackground:withObject:方法創建一個新的分離線程,並使用指定的方法作爲新線程的入口點。例如,如果你有一些對象(由變量MyObj中表示)和對象有一個名爲DoSomething的方法要在後臺線程中運行,你可以可以使用下面的代碼來做到這一點:

[myObj performSelectorInBackground:@selector(doSomething) withObject:nil]; 

調用此方法的效果是一樣的,如果你稱爲detachNewThreadSelector:toTarget:withObject:NSThread的與當前對象,選擇器,和作爲參數的參數對象的方法。新線程立即使用默認配置生成並開始運行。在選擇器內部,您必須像任何線程一樣配置線程。例如,你需要建立一個自動釋放池(如果您沒有使用的垃圾收集),並配置線程的運行循環,如果你打算使用它。有關如何配置新線程的信息

0

我認爲它們是相同的,因爲- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;NSObject (NSThreadPerformAdditions)類別的NSThread.h中定義。這不是確鑿的結果,但這是這方面的證據。

+0

我剛做了一個測試,都沒有爲你設置一個自動釋放池。 –

相關問題