目标在Swift中分离线程的意义

时间:2019-01-25 17:02:42

标签: ios objective-c swift multithreading parallel-processing

我最近开始迅速熟悉显式多线程。我试图理解下面的方法来调度一个新的线程来执行选择器。虽然我能够成功使用它,但我不了解target在以下方法的签名中的意义是什么?像Java中那样,该参数是否用于保持监视器锁定以确保线程安全?我尝试参考文档没有太大帮助。如果有人能帮助我了解这里的情况,我将不胜感激。

(void)detachNewThreadSelector:(SEL)selector 
                   toTarget:(id)target 
                 withObject:(id)argument;

2 个答案:

答案 0 :(得分:2)

aTarget的文档说:

  

将在新线程上接收消息aSelector的对象。

这意味着将在您作为目标传递的对象上调用选择器。这与进行任何其他方法调用没有什么不同。您在类的特定实例上调用方法。目标是特定实例。选择器是在该实例上调用的方法。

答案 1 :(得分:1)

detachNewThreadSelector:toTarget:withObject:看作是使用给定参数调用给定对象的给定方法(如果该方法的参数为零,则忽略该参数),但是在新创建的线程上调用该方法。

例如:

[NSThread detachNewThreadSelector:@selector(expensiveComputationWithObjects:)
                           target:someCalculatorObject
                       withObject:someVeryLargeArray]

因此,该方法提供了一种在后台线程上分派方法调用的非常方便的方法(尽管它不允许重用现有线程)。

另一个较小的缺点是,讨论中的方法最多需要具有一个参数,尽管可以通过使目标方法接收保存实际参数的结构(字典或其他类)来绕开此限制。