Разница между [NSThread detachNewThreadSelector:] и -performSelectorInBackground - PullRequest
24 голосов
/ 19 января 2010

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

Ответы [ 4 ]

31 голосов
/ 19 января 2010

Они идентичны. См. документацию .

performSelectorInBackground: withObject: Эффект вызова этого метода такой же, как если бы вы вызвали detachNewThreadSelector: toTarget: withObject: метод NSThread с текущим объектом, селектором и объектом параметра в качестве параметров.

5 голосов
/ 20 января 2010

Как говорит Майкл, они идентичны. Я думаю, чтобы использовать поток executeSelectorInBackground: withObject: это более простой способ, чем NSThread.

Однако NSThread может управлять своим приоритетом, размером стека и т. Д. Если вы хотите настроить поведение, я рекомендую NSThread вместо executeSelectorInBackground: withObject: .

3 голосов
/ 05 ноября 2010

Кори, если вы работаете в новом потоке и используете [autorelease объекта], вам нужно создать свой собственный пул autorelease. Довольно просто сделать:

- (void)uploadDataOnThread
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // do something here...

    [pool release];
}
2 голосов
/ 23 сентября 2010

Интересно, ребята, вы не можете указать на какие-либо различия между ними-

Я скажу тебе это очень много. У нас есть приложение для iphone, которое блокировалось, пока мы отображали значок раскрытия " интернет-активность " в верхней панели, и окно с надписью " Отправка ... ", пока мы отправляли аудио файл до сервера и performSelectorInBackground: НЕ работал. Когда мы поменялись performSelectorInBackground с detachNewThreadSelector, все работало нормально, но теперь он жалуется, что никакие autoreleased объекты, запущенные в этом потоке, не могут быть освобождены пулом ... возможно, это потому, что пул находится в основном потоке

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