scheduleTimerWithTimeInterval против executeselector с задержкой в ​​iOS 5.0 - PullRequest
10 голосов
/ 14 ноября 2011

Я делаю вызов функции с 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 ]

21 голосов
/ 23 ноября 2011

Вот ваши отличия

executeSelectorWithObjectAfterDelay

  • , как следует из названия, выполняет селектор через указанное количество секунд. РАЗ .

  • Внимание, которое вам необходимо предпринять, заключается в том, что вам необходимо отменить все предыдущие запросы на выполнение, прежде чем объект, над которым выполняется селектор, будет выпущен.Для этого используйте метод cancelPerformSelector.

scheduleTimerWithTimeInterval

  • Этот метод дает вам возможность вызывать селектор и после указанной продолжительности, но такжеимеет параметр [repeat:], который позволяет вам вызывать тот же селектор REPEATEDLY

  • Вы также можете передавать вызовы селекторам вызовов, которые особенно полезны, когда ваш селекторнужно много аргументов.

  • Вам нужно отключить таймер, когда он больше не нужен.Это должно сделать трюк

    [myTimer invalidate];myTimer = nil;

Также это самая определенная тема в NSTimer, пожалуйста, посмотрите на нее. Как мне использовать NSTimer?

0 голосов
/ 18 ноября 2011

Вы можете использовать performSelectorWithObjectAfterDelay, а затем cancelPerformSelector, чтобы прервать его, если он больше не нужен.Я думаю, что это проще, чем scheduledTimerWithTimeInterval, так как вам не нужно хранить ссылку на таймер.По большей части эти два подхода должны вести себя одинаково.

...