Подтвердить что ты не робот

Разница между [NSThread detachNewThreadSelector:] и -performSelectorInBackground

Я использую -performSelectorInBackground во многих моих приложениях, вроде забывая о -detachNewThreadSelector. Теперь мне интересно, какие различия между ними. Являются ли они в значительной степени взаимозаменяемыми или существуют различия и места, где один превосходит другого? Спасибо!

4b9b3361

Ответ 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, запущенные в этом потоке, подлежат выпуску пулом.. возможно, это связано с тем, что пул находится в основном потоке