swift中的performSelectorInBackground

时间:2015-07-14 06:33:32

标签: ios objective-c swift grand-central-dispatch nsobject

现在我注意到[NSObject performSelectorInBackground]不可用 在斯威夫特。

要在Swift的背景中做些什么,我可以使用什么 而不是performSelectorInBackground

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

2 个答案:

答案 0 :(得分:1)

  

我找到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表示)并且该对象有一个你想在后台线程中运行的doSomething方法,你可以使用以下代码来做到这一点:

     

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

     

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

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

Concurrency and Application Design

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

答案 1 :(得分:0)

使用以下代码

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),{

})