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