Значение Target в отрыве нити в Swift - PullRequest
0 голосов
/ 25 января 2019

Я недавно начал знакомиться с явным многопоточностью в swift.Я пытаюсь понять метод ниже, чтобы отправить новый поток для выполнения селектора.хотя я могу использовать его успешно, я не понимаю, каково значение target в сигнатуре метода ниже?этот аргумент используется для блокировки монитора для безопасности потоков, как в Java?Я пытался ссылаться на документацию без особой помощи.Буду очень признателен, если кто-нибудь поможет мне понять, что здесь происходит под капотом.

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

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Думайте о detachNewThreadSelector:toTarget:withObject: как о вызове заданного метода данного объекта с заданным аргументом (или игнорируйте аргумент, если метод имеет нулевые параметры), но вызывайте метод во вновь созданном потоке.

Например:

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

Таким образом, метод обеспечивает очень удобный способ отправки вызовов методов в фоновые потоки (хотя он не позволяет повторно использовать существующий поток).

Другим небольшим недостатком является то, что обсуждаемые методы должны иметь не более одного параметра, хотя это ограничение можно обойти, если целевой метод получит структуру (словарь или другой класс), которая содержит фактические аргументы.

0 голосов
/ 25 января 2019

Документация для aTarget гласит:

Объект, который получит сообщение aSelector в новом потоке.

Это означает, что будет вызван селекторна объекте, который вы передаете в качестве цели.Это ничем не отличается от выполнения любого другого вызова метода.Вы вызываете метод для конкретного экземпляра класса.Цель - это конкретный экземпляр.Селектор - это метод, который вызывается для этого экземпляра.

...