2010-09-15 3 views
1

с использованием iphone sdk 4. У меня есть NSTimer, который вызывает метод каждые 3 секунды, однако вызываемый emethod приводит к тому, что пользовательский интерфейс не реагирует. Я думал, что обратный вызов NSTImer произойдет в отдельном потоке основного потока, но кажется, что это не так.Замена NSTimer

Как я могу заменить это с NSOperation или что-то, так что метод еще называют каждые 3 секунды, но в фоновом потоке

ответ

-2

Ваш текущий сценарий: метод «X» будет называться вашим временем для каждого 3 секунд. ABC - это задача, которую вы выполняете в методе «Х».

Что вам нужно изменить: Создайте новый метод «Y». Реализовать задачу ABC в методе «Y». В методе «X» (прокомментируйте весь свой код в X) и используйте [self performSelector:@selector(Y) withObject:nil]

Обратите внимание, что выше селектор работает, если метод «Y» не принимает никаких аргументов.

+1

Это ничего не изменит, потому что Y будет выполняться в основном потоке. Если вы это сделаете, вы должны использовать 'performSelectorInBackground: withObject'. –

+0

Вы ошибаетесь, когда вы вызываете performSelector, он будет создан в новом потоке. – Satyam

+0

Нет, не будет. Только если вы используете 'performSelector: onThread: withObject: waitUntilDone:' вы можете указать поток, в который должен быть выполнен селектор, но этот поток уже должен существовать. – Toastor