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

标签 multithreading cocoa nsthread

它们似乎执行相当相似的任务:启动一个新线程来快速轻松地执行该选择器。但有什么区别吗?也许与内存管理有关?

最佳答案

两者是相同的。

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

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

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

关于multithreading - +[NSThread detachNewThreadSelector :toTarget:withObject:] and -[NSObject performSelectorInBackground:withObject:]? 和有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539460/

相关文章:

c# - 停止方法并等待用户输入

cocoa - Apple 会接受 Mac App Store 中的守护程序吗?

iphone - 在 UITableViewController 中的通知中心添加观察者的位置

objective-c - 如何在 cocoa 中获得所有可能的屏幕分辨率?

ios - 从 Swift 中的特定线程运行代码

ios - NSThread sleepfortimeinterval 阻塞主线程

c++ - 使用 Threads c++ 时套接字无法正确打开

multithreading - 映射用户级线程和内核级线程

java - 何时有效地使用线程

iphone - 在此代码段中使用 NSThread