ScheduleTimerWithTimeInterval vs performselector с задержкой с iOS 5.0
Я выполняю вызов функции с помощью schedTimerWithTimeInterval. Я просто проверяю, что синтаксический анализ xml завершен или нет для определенных веб-сервисов и недействителен таймер в методе didEndElement после получения успешного ответа.
timerForStopWebService = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(stopWS) userInfo:nil repeats:NO];
теперь я сталкиваюсь с проблемой с iOS 5.0 и отлично работает в других версиях iOS. в iOS 5.0 функция stopWS вызывается в любое время, даже если я ее недействителен. сообщите мне, если у вас есть решение для этого.
и теперь я реализую performselector с задержкой и устанавливаю логические переменные в stopWS, чтобы идентифицировать, что синтаксический анализ завершен или нет. я просто хочу знать, есть ли какая-то существенная разница между этим? и работает ли это решение для моей проблемы?
если существует другой способ, пожалуйста, предложите мне, спасибо.
Ответы
Ответ 1
Вот ваши отличия
выполнитьSelectorWithObjectAfterDelay
-
как предлагает название, выполняет селектор через указанное количество секунд. РАЗ.
-
Уход, который вам нужно предпринять, заключается в том, что вам нужно отменить любые предыдущие запросы выполнения до того, как будет выпущен объект, в котором выполняется селектор. Для этого используйте метод cancelPerformSelector.
scheduledTimerWithTimeInterval
-
этот метод дает вам возможность вызывать селектор по истечении заданной продолжительности, но также имеет параметр [repeat:], который позволяет вызывать тот же селектор REPEATEDLY
-
Вы также можете передавать вызовы для селекторов вызовов, которые особенно полезны, когда вашему селектору требуется много аргументов.
-
Вам необходимо аннулировать таймер, когда он больше не нужен. Это должно сделать трюк
[myTimer invalidate]; myTimer = nil;
Также это самый определенный поток на NSTimer, пожалуйста, взгляните на него. Как использовать NSTimer?
Ответ 2
Вы можете использовать performSelectorWithObjectAfterDelay
, а затем cancelPerformSelector
, чтобы прервать его, если он больше не нужен. Я думаю, что это проще, чем scheduledTimerWithTimeInterval
, так как вам не нужно хранить ссылку на таймер. По большей части эти два подхода должны вести себя одинаково, хотя.