(iphone) запустить таймер из фонового потока?

Я создаю таймер с [NSTimer scheduledTimerWithTimerInterval:target:selector:...] из фонового потока
Кажется, что таймер, созданный из фонового потока, не вызывает селектор, указанный в качестве аргумента.

Мне нужно что-то особенное для запуска таймера из фонового потока?
Спасибо

  • РЕДАКТИРОВАТЬ

Вот последовательность

performSelectorInBackground: pushViewController

из последовательности инициализации viewController,

I alloc a timer with the above method.  

и селектор таймера не будет вызван.


person eugene    schedule 30.03.2011    source источник
comment
Пример кода, пожалуйста, мы не экстрасенсы!   -  person occulus    schedule 30.03.2011
comment
Спасибо. Но актуальный код, пожалуйста, не перефразируйте. Настоятельно рекомендую прочитать это: msmvps.com / blogs / jon_skeet / archive / 2010/08/29 / Цитата: «Не давайте мне код, который чем-то похож на настоящий, но явно не настоящий»   -  person occulus    schedule 30.03.2011


Ответы (1)


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

См. Раздел Руководства по основам Какао, озаглавленный «Безопасны ли потоки фреймворков какао?»: В нем говорится: «Все объекты UIKit должны использоваться только в основном потоке».

Исходный ответ

Ничего особенного не нужно. Селектор будет вызван в потоке, из которого вы выполнили вызов scheduleTimer.

person occulus    schedule 30.03.2011
comment
@occulus, спасибо за ответ, да, я добавил:, и я установил bp, чтобы узнать, звонят ли они. - person eugene; 30.03.2011
comment
как только я меняю часть performselectorinbackground: pushViewController на обычную [navController pushViewController ..], таймер работает нормально - person eugene; 30.03.2011
comment
Я предполагаю, что поток, который выполнил pushViewController, ушел к моменту загрузки представления ... и таймер был прикреплен к теперь пропавшему потоку. (Если есть концепция присоединения таймера к потоку) - person eugene; 30.03.2011
comment
[navController pushViewController] ничего не делает с таймером, что вы имеете в виду? - person occulus; 30.03.2011
comment
@occulus помещаемый viewController создает таймер. (см. мою правку) - person eugene; 30.03.2011
comment
ну ладно, я поставил NSLog и никаких сообщений туда - person eugene; 30.03.2011
comment
это еще одна проблема .. Я не знаю об обновлении пользовательского интерфейса ни из какого другого потока, кроме основной политики. Хорошо ли работает pushViewController в фоновом потоке или это противоречит политике? - person eugene; 30.03.2011
comment
​​stackoverflow.com/questions/2441856/ Значит, это неправильный ответ? - person eugene; 30.03.2011
comment
Да, pushViewController следует вызывать только из фонового потока. Другой ответ, с которым вы связались, работает плохо. Обновлю свой ответ. - person occulus; 30.03.2011