他們似乎執行了一個相當類似的任務:啓動一個快速簡單地執行該選擇器的新線程。但是有什麼區別嗎?也許關於內存管理?+ [NSThread detachNewThreadSelector:toTarget:withObject:]和 - [NSObject performSelectorInBackground:withObject:]之間的區別是什麼?
回答
兩者都是相同的。
在iOS和Mac OS X v10.5及更高版本中,所有對象都能夠生成一個新線程並使用它來執行其中一個方法。 performSelectorInBackground:withObject:方法創建一個新的分離線程,並使用指定的方法作爲新線程的入口點。例如,如果你有一些對象(由變量MyObj中表示)和對象有一個名爲DoSomething的方法要在後臺線程中運行,你可以可以使用下面的代碼來做到這一點:
[myObj performSelectorInBackground:@selector(doSomething) withObject:nil];
調用此方法的效果是一樣的,如果你稱爲detachNewThreadSelector:toTarget:withObject:NSThread的與當前對象,選擇器,和作爲參數的參數對象的方法。新線程立即使用默認配置生成並開始運行。在選擇器內部,您必須像任何線程一樣配置線程。例如,你需要建立一個自動釋放池(如果您沒有使用的垃圾收集),並配置線程的運行循環,如果你打算使用它。有關如何配置新線程的信息
我認爲它們是相同的,因爲- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;
在NSObject (NSThreadPerformAdditions)
類別的NSThread.h中定義。這不是確鑿的結果,但這是這方面的證據。
我剛做了一個測試,都沒有爲你設置一個自動釋放池。 –
- 1. NSTimer,NSTask,NSThread和NSRunloop之間的基本區別是什麼?
- 2. NSthread和NStimer和NSNotifcation之間的區別?
- 3. NSThread和detachNewThreadSelector之間的區別:toTarget:withObject:
- 4. NSThread和NSTask之間的區別
- 5. $(())和expr之間的區別是什麼?
- 6. $和$ .fn之間的區別是什麼?
- 7. ++和:haskell之間的區別是什麼?
- 8. $(「」)和$ .find(「」)之間的區別是什麼?
- 9. 「\」和「\。」之間的區別是什麼?
- 10. 「$ | ++」和「$ | = 1」之間的區別是什麼
- 11. $(...)和`...`之間的區別是什麼
- 12. .equals()和==之間的區別是什麼?
- 13. [undefined]和[,]之間的區別是什麼?
- 14. 區別:%% a和%variable%變量之間的區別是什麼?
- 15. 什麼是爲PrintWriter和DataOutputStream之間的區別是什麼?
- 16. - [NSObject isEqual:]和 - [NSNumber isEqualToNumber:]:有什麼區別?
- 17. [EmailPasswordAuthProvider,EmailAuthProvider]之間的區別是什麼
- 18. MVC和MVVM之間的區別和相似之處是什麼?
- 19. TVF/UDF之間的區別是什麼
- 20. System.Linq.Enumerable.WhereListIterator&System.Linq.Enumerable.WhereSelectListIterator之間的區別是什麼?
- 21. 什麼之間的區別〜^和Git中
- 22. 什麼@android之間的區別:和android:
- 23. 什麼是SetupAPI,SetupAPI1和SetupAPI2?他們之間有什麼區別?
- 24. lock_guard之後lock()和guard()之間的區別是什麼
- 25. 「層」和「層」之間有什麼區別?
- 26. Tableau和QlikView之間有什麼區別
- 27. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 28. @Entity和@embeddable之間有什麼區別
- 29. ContentObservable和DataSetObservable之間有什麼區別?
- 30. touchmove和gesturechange之間有什麼區別?
好問題。我會說,'perfomSelectorInBackground'可重用從池中的線程(通過'libdispatch'),但該文檔明確地說,這將創建一個新的線程。所以是的,它看起來和'NSThread'方法完全一樣...... –