2010-10-07 4 views
1

Я, казалось бы, простой вопрос, на который я не могу найти ответ (и это мешает моему приложению).iPhone SDK Фоновые темы, вызывающие другие методы

У меня есть фоновый поток, работающий под управлением paricular метода:

-(void)processImage:(UIImage *)image { 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    //Process image here in the background here 

    [pool drain]; 
} 

Это много работает большой, но мой вопрос возникает, когда я хочу, чтобы вызвать другой метод из внутри уже фонового метода. Остается ли этот звонок в фоновом режиме? Нужно ли добавлять NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; и [pool drain]; к новому методу, чтобы запустить его в фоновом режиме?

Любые советы были бы очень полезными. Я немного смущен этим.

Большое спасибо, Brett

ответ

1

Он будет оставаться на заднем плане, в том же потоке она была вызвана из.

Некоторые заметки пронизывающие, чтобы рассмотреть с этим:

  • Это не может быть очевидным, но если вы звоните таймер из фонового потока, а поток завершает работу до таймера должен уйти, таймер НЕ будет вызываться. Таким образом, рекомендуется настроить таймеры из основного потока
  • Вам не нужен еще один пул автообновлений, если вы не создадите другой поток.
  • Любых обновления пользовательского интерфейса должны быть сделаны в основном потоке
0

Вам не нужно, чтобы добавить еще один autorelease бассейна, один у вас уже есть достаточно. И да, все вызовы, которые вы делаете, которые происходят из этого потока, остаются в этом потоке и, следовательно, также запускаются «в фоновом режиме». Исключение было бы использование «performSelectorOnMainThread:», что, конечно же, делает данный селектор для основного потока :-) Если вы хотите вызвать методы GUI (например, установить изображение в UIImageView), вы должны быть уверены так и на основной нити. См. Документы для «performSelectorOnMainThread: waitUntilDone:» (извините за то, что не дал вам ссылки, я набираю это на своем iPad).

Смежные вопросы