+ [NSThread detachNewThreadSelector:toTarget:withObject:]和 - [NSObject performSelectorInBackground:withObject:]之间有什么区别?

Gra*_*aul 9 cocoa multithreading nsthread

他们似乎执行了一个相当类似的任务:启动一个快速轻松地执行该选择器的新线程.但是有什么不同吗?也许关于内存管理?

Vij*_*com 4

两者是相同的。

\n\n

在 iOS 和 Mac OS X v10.5 及更高版本中,所有对象都能够生成新线程并使用它来执行其方法之一。PerformSelectorInBackground:withObject: 方法创建一个新的分离线程,并使用指定的方法作为新线程的入口点。例如,如果您有某个对象(由变量 myObj 表示),并且该对象有一个名为 doSomething 的方法,您希望在后台线程中运行该方法,则可以使用以下代码来执行此操作:

\n\n
[myObj performSelectorInBackground:@selector(doSomething) withObject:nil];\n
Run Code Online (Sandbox Code Playgroud)\n\n

调用这个方法的效果和你用当前对象调用 NSThread 的 detachNewThreadSelector:toTarget:withObject: 方法是一样的,调用该方法的效果与以当前对象、选择器和参数对象为参数使用默认配置立即生成新线程并开始运行。在选择器内部,您必须像配置任何线程一样配置线程。例如,您需要设置一个自动释放池(如果您没有使用垃圾收集)并配置 thread\xe2\x80\x99s 运行循环(如果您计划使用它)。有关如何配置新线程的信息

\n