Запуск метода для запуска в отдельном потоке - PullRequest
2 голосов
/ 15 января 2009

Я хочу знать, как я могу запустить метод в отдельном потоке? Ссылки на класс и метод. Спасибо.

Ответы [ 5 ]

4 голосов
/ 15 января 2009

Другая альтернатива -

[someObject performSelectorInBackground:@selector(someSelector:) 
        withObject:nil];

Крис.

3 голосов
/ 15 января 2009

Найден ответ (вы можете использовать любое из этих утверждений для достижения этой цели):

[NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil]; 

OR

NSThread *myThread = [[NSThread alloc] initWithTarget:self
                     selector:@selector(myThreadMainMethod:) 
                     object:nil]; 
[myThreadstart]; 
2 голосов
/ 19 января 2009

Нашел ответ на свой вопрос:

Когда я начинаю новый метод в отдельная тема, зачем мне NSAutoreleasePool объект в этом метод? Если я не добавлю это, я получу Стек у бассейна в логе.

Автозапуск пулов и потоков (MemoryMgmt.pdf с Apple.com):

Каждая нить в приложении Какао поддерживает свой собственный стек NSAutoreleasePool объекты. Когда поток завершается автоматически выпускает все пулы авто-релиза ассоциируется с самим собой. Autorelease пулы создаются автоматически и уничтожен в основной ветке приложения на основе приложения Кит, поэтому ваш код обычно не приходится иметь дело с ними там. если ты делают звонки Какао за пределами Основной поток Application Kit, Тем не менее, вам нужно создать свой собственный Авто-релиз бассейн. Это тот случай, если вы пишете только для основания приложение или если вы отсоедините поток.

2 голосов
/ 16 января 2009

Если вы уже создали NSThread и удерживали объект NSThread, вы можете впоследствии отправить больше сообщений для выполнения в этой теме, используя:

–[NSObject performSelector:onThread:withObject:waitUntilDone:]
1 голос
/ 16 января 2009

Вам нужен новый пул автоматического выпуска, чтобы обрабатывать все автоматическое освобождение в этом потоке. В основном потоке есть тот, который создается фреймворком автоматически, прежде чем вы перейдете к своему коду.

Также убедитесь, что при обновлении интерфейса вы делегируете его обратно в основной поток. Обновление может работать, а может и не работать, если вы не

[self performSelectorOnMainThread:@selector(someSelector:) 
               withObject:passedInObject waitUntilDone:NO];

Крис.

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