Ios 在Swift中执行选择背景

Ios 在Swift中执行选择背景,ios,objective-c,swift,grand-central-dispatch,nsobject,Ios,Objective C,Swift,Grand Central Dispatch,Nsobject,现在我注意到,[NSObject performSelectorInBackground]不可用 用Swift。 要在Swift中在后台执行某些操作,我可以使用什么 而不是执行选择背景? 我发现dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u BACKGROUND,0),^{}),它可以替代performSelectorInBackground 我发现dispatch\u async(di

现在我注意到,
[NSObject performSelectorInBackground]
不可用 用Swift。

要在Swift中在后台执行某些操作,我可以使用什么
而不是
执行选择背景


我发现
dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u BACKGROUND,0),^{})
,它可以替代
performSelectorInBackground

我发现
dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u BACKGROUND,0),^{})
,它可以替代
performSelectorInBackground

事实上,这是有区别的

NSObject-performSelectorInBackground:withObject:
方法始终使用
NSThread
生成新线程

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

[myObj performSelectorInBackground:@selector(doSomething)with object:nil]

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

相比之下,中央大调度、全局队列更高效、更复杂

  • 它们提供自动和整体的线程池管理
  • 它们提供了调谐装配的速度
  • 它们的内存效率更高(因为线程堆栈不会停留在应用程序内存中)

使用下面的代码

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),{

})

是的
dispatch\u async
可以满足您的需要。事实上,它可能比
performInBackground
更好,因为块可以捕获局部变量,使生活更加轻松。谢谢您的回答。我会用的。GCD非常有用。