我最近开始迅速熟悉显式多线程。我试图理解下面的方法来调度一个新的线程来执行选择器。虽然我能够成功使用它,但我不了解target
在以下方法的签名中的意义是什么?像Java中那样,该参数是否用于保持监视器锁定以确保线程安全?我尝试参考文档没有太大帮助。如果有人能帮助我了解这里的情况,我将不胜感激。
(void)detachNewThreadSelector:(SEL)selector
toTarget:(id)target
withObject:(id)argument;
答案 0 :(得分:2)
aTarget
的文档说:
将在新线程上接收消息aSelector的对象。
这意味着将在您作为目标传递的对象上调用选择器。这与进行任何其他方法调用没有什么不同。您在类的特定实例上调用方法。目标是特定实例。选择器是在该实例上调用的方法。
答案 1 :(得分:1)
将detachNewThreadSelector:toTarget:withObject:
看作是使用给定参数调用给定对象的给定方法(如果该方法的参数为零,则忽略该参数),但是在新创建的线程上调用该方法。
例如:
[NSThread detachNewThreadSelector:@selector(expensiveComputationWithObjects:)
target:someCalculatorObject
withObject:someVeryLargeArray]
因此,该方法提供了一种在后台线程上分派方法调用的非常方便的方法(尽管它不允许重用现有线程)。
另一个较小的缺点是,讨论中的方法最多需要具有一个参数,尽管可以通过使目标方法接收保存实际参数的结构(字典或其他类)来绕开此限制。