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, так как вам не нужно хранить ссылку на таймер. По большей части эти два подхода должны вести себя одинаково, хотя.