PerforSelectorInBackground создает новый поток для каждого вызова? - PullRequest
3 голосов
/ 14 января 2011

Создает ли performSelectorInBackground новый поток для каждого вызова или разделяет поток (который не является основным потоком) для всех вызовов (возможно, в очереди)?

1 Ответ

11 голосов
/ 14 января 2011

Новый поток создается при каждом вызове -performSelectorInBackground:withObject:

Из Руководства по программированию потоков

Использование NSObject для создания потока

В iOS и Mac OS X v10.5 и более поздних версиях все объекты имеют возможность создавать новый поток и использовать его для выполнения одного из своих методов. ExecuteSelectorInBackground: withObject: метод создает новый отдельный поток и использует указанный метод в качестве точки входа для нового потока. Например, если у вас есть какой-то объект (представленный переменной myObj), и у этого объекта есть метод doSomething, который вы хотите запустить в фоновом потоке, вы можете использовать следующий код для этого:

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

Эффект вызова этого метода такой же, как если бы вы вызвали detachNewThreadSelector: toTarget: withObject: метод NSThread с текущим объектом, селектором и объектом параметра в качестве параметров. Новый поток создается сразу, используя конфигурацию по умолчанию, и начинает работать. Внутри селектора вы должны настроить поток так же, как любой другой поток. Например, вам нужно будет настроить пул автоматического выпуска (если вы не использовали сборщик мусора) и настроить цикл выполнения потока, если вы планируете его использовать. Информацию о настройке новых потоков см. В разделе «Настройка атрибутов потока».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...