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

Другие вопросы по тегам