В чем разница между + [NSThread detachNewThreadSelector: toTarget: withObject:] и - [NSObject executeSelectorInBackground: withObject:]? - PullRequest
9 голосов
/ 30 июня 2011

Похоже, они выполняют довольно похожую задачу: запуск нового потока, который выполняет этот селектор быстро и легко. Но есть ли различия? Может быть, что касается управления памятью?

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

Оба идентичны.

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

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

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

0 голосов
/ 04 июля 2011

Я предполагаю, что они одинаковы, так как - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg; определен в NSThread.h в категории NSObject (NSThreadPerformAdditions).В этом нет ничего убедительного, но это свидетельство в этом направлении.

...