【问题标题】:Does performSelectorInBackground spawn new thread for each call?performSelectorInBackground 是否为每个调用生成新线程?
【发布时间】:2011-01-14 05:00:11
【问题描述】:

performSelectorInBackground 是为每个调用生成一个新线程,还是为所有调用(可能排队)共享一个线程(不是主线程)?

【问题讨论】:

    标签: iphone multithreading queue


    【解决方案1】:

    每次调用-performSelectorInBackground:withObject:都会创建一个新线程

    来自Threading Programming Guide

    使用 NSObject 生成线程

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 2012-07-02
      相关资源
      最近更新 更多