performSelectorInBackground

performSelectorInBackground

现在我注意到[NSObject performSelectorInBackground]不可用
在Swift中。
要在Swift中进行后台操作,我该怎么用
而不是performSelectorInBackground
我找到了dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{}),可以替代performSelectorInBackground吗?

最佳答案

我找到了dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{}),可以替代performSelectorInBackground吗?

是。

实际上,存在差异。
NSObject -performSelectorInBackground:withObject:方法始终使用NSThread产生新线程。

Using NSObject to Spawn a Thread

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

[myObj performSelectorInBackground:@selector(doSomething) withObject:nil];
调用此方法的效果与使用当前对象,选择器和参数对象作为参数调用NSThread的detachNewThreadSelector:toTarget:withObject:方法的效果相同。立即使用默认配置生成新线程并开始运行。在选择器内部,必须像配置任何线程一样配置线程。例如,如果您打算使用自动释放池(如果您不使用垃圾回收),则需要设置该线程的运行循环。有关如何配置新线程的信息,请参阅配置线程属性。

相比之下,Grand Central Dispatch,Global Queue更高效,更复杂。

Concurrency and Application Design


  • 他们提供自动的整体线程池管理。
  • 它们提供调整后的装配的速度。
  • 它们的内存效率更高(因为线程堆栈不会在应用程序内存中徘徊)。
  • 10-08 11:39