Создает ли performSelectorInBackground новый поток для каждого вызова или разделяет поток (который не является основным потоком) для всех вызовов (возможно, в очереди)?
performSelectorInBackground
Новый поток создается при каждом вызове -performSelectorInBackground:withObject:
-performSelectorInBackground:withObject:
Из Руководства по программированию потоков
Использование NSObject для создания потока В iOS и Mac OS X v10.5 и более поздних версиях все объекты имеют возможность создавать новый поток и использовать его для выполнения одного из своих методов. ExecuteSelectorInBackground: withObject: метод создает новый отдельный поток и использует указанный метод в качестве точки входа для нового потока. Например, если у вас есть какой-то объект (представленный переменной myObj), и у этого объекта есть метод doSomething, который вы хотите запустить в фоновом потоке, вы можете использовать следующий код для этого: [myObj performSelectorInBackground:@selector(doSomething) withObject:nil]; Эффект вызова этого метода такой же, как если бы вы вызвали detachNewThreadSelector: toTarget: withObject: метод NSThread с текущим объектом, селектором и объектом параметра в качестве параметров. Новый поток создается сразу, используя конфигурацию по умолчанию, и начинает работать. Внутри селектора вы должны настроить поток так же, как любой другой поток. Например, вам нужно будет настроить пул автоматического выпуска (если вы не использовали сборщик мусора) и настроить цикл выполнения потока, если вы планируете его использовать. Информацию о настройке новых потоков см. В разделе «Настройка атрибутов потока».
Использование NSObject для создания потока
В iOS и Mac OS X v10.5 и более поздних версиях все объекты имеют возможность создавать новый поток и использовать его для выполнения одного из своих методов. ExecuteSelectorInBackground: withObject: метод создает новый отдельный поток и использует указанный метод в качестве точки входа для нового потока. Например, если у вас есть какой-то объект (представленный переменной myObj), и у этого объекта есть метод doSomething, который вы хотите запустить в фоновом потоке, вы можете использовать следующий код для этого:
[myObj performSelectorInBackground:@selector(doSomething) withObject:nil];
Эффект вызова этого метода такой же, как если бы вы вызвали detachNewThreadSelector: toTarget: withObject: метод NSThread с текущим объектом, селектором и объектом параметра в качестве параметров. Новый поток создается сразу, используя конфигурацию по умолчанию, и начинает работать. Внутри селектора вы должны настроить поток так же, как любой другой поток. Например, вам нужно будет настроить пул автоматического выпуска (если вы не использовали сборщик мусора) и настроить цикл выполнения потока, если вы планируете его использовать. Информацию о настройке новых потоков см. В разделе «Настройка атрибутов потока».