Я использую -performSelectorInBackground
во многих моих приложениях, вроде забывая о -detachNewThreadSelector
. Теперь мне интересно, какие различия между ними. Являются ли они в значительной степени взаимозаменяемыми или существуют различия и места, где один превосходит другого? Спасибо!
Разница между [NSThread detachNewThreadSelector:] и -performSelectorInBackground
Ответ 1
Они идентичны. См. documentation.
performSelectorInBackground: withObject: Эффект вызова этого метода такой же, как если бы вы вызывали метод detachNewThreadSelector: toTarget: withObject: метод NSThread с текущим объектом, селектором и параметром в качестве параметров.
Ответ 2
Как говорит Майкл, они идентичны. Я думаю, использовать поток выполнитьSelectorInBackground: withObject: проще, чем NSThread.
Однако NSThread может контролировать свой приоритет, стекизировать и т.д. Если вы хотите настроить поведение, я рекомендую NSThread вместо выполнитьSelectorInBackground: withObject:.
Ответ 3
Кори, если вы работаете в новом потоке, и вы используете [autorelease объекта], вам нужно создать свой собственный пул авторесурсов. Довольно просто сделать:
- (void)uploadDataOnThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// do something here...
[pool release];
}
Ответ 4
Интересно, что вы, ребята, не можете указать какие-либо различия между ними -
Я расскажу вам об этом. У нас есть приложение iphone, которое блокировалось, пока мы отображали значок раскрытия информации о "активности в Интернете" в верхней панели и окно, в котором говорилось "Отправка...", когда мы отправляли аудиофайл на сервер, а performSelectorInBackground:
- НЕ за работой. Когда мы поменялись performSelectorInBackground
на detachNewThreadSelector
, он работал нормально, но теперь он жалуется, что объекты autoreleased
, запущенные в этом потоке, подлежат выпуску пулом.. возможно, это связано с тем, что пул находится в основном потоке