2011-11-14 66 views
10

我正在使用scheduledTimerWithTimeInterval函數調用。我只是檢查XML解析是否完成或沒有特定的Web服務,並在取得成功的響應後didEndElement方法中的無效計時器。scheduledTimerWithTimeInterval vs performselector帶有iOS 5.0的延遲

timerForStopWebService = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(stopWS) userInfo:nil repeats:NO]; 

現在我面臨iOS 5.0的問題,它在其他iOS版本中工作正常。在iOS 5.0中,即使我使其無效,也可以隨時調用stopWS函數。讓我知道你是否有解決方案。

,現在我實現在stopWS與延遲performselector並設置布爾變量來標識解析是否完成。我只是想知道這是否有任何主要區別?這個解決方案適用於我的問題嗎?

如果有其他方式存在,請給我建議,謝謝。

+1

我不明白你在找什麼。你想讓這個方法總是被調用嗎?還是你想能夠使它失效,所以它不被稱爲?這並不清楚。 – Oliver

+0

我只想知道scheduledTimerWithTimeInterval與performselector之間的區別,因爲我面臨着iOS 5.0的問題。 –

+0

這是什麼問題?你在你的問題中談論它,但目前尚不清楚。 – Oliver

回答

21

這是你們的分歧

performSelectorWithObjectAfterDelay

  • 顧名思義執行的指定的秒數後一個選擇。 ONCE

  • ,你需要在這裏採取的護理,你需要上正在被釋放進行選擇對象之前取消任何先前的執行請求。爲此使用cancelPerformSelector方法。

scheduledTimerWithTimeInterval

  • 此方法對你太調用指定的持續時間後選擇的能力,但它也有一個參數[重複:],讓你調用相同的選擇Gz重複

  • 您也可以通過在調用調用選擇,當你選擇需要大量的論據是特別有幫助的。

  • 你需要它不再需要的時候失效定時器。這應該做的伎倆

    [myTimer無效]。 myTimer = nil;

此外,這是NSTimer上最權威的線程,請看看它。 How do I use NSTimer?

0

您可以使用performSelectorWithObjectAfterDelay然後cancelPerformSelector中止,如果不再需要。我認爲這比scheduledTimerWithTimeInterval容易,因爲你不需要存儲對定時器的引用。儘管這兩種方法大部分應該表現相同。

+0

您不需要存儲定時器參考。一旦將它添加到循環中,只需要引用即可取消它...與cancelPerformSelector相同。否則,你可以做一個單一的射擊計時器。 – David

+0

主要區別在於何時需要取消提問者,而提問者似乎需要取消提問。在cancelPerformSelector中,你只需要對象的引用,你通常可以訪問它(可能它只是自己)。要取消計時器,您必須將計時器存儲在某處,可能是作爲實例變量。 – zeroimpl