2011-11-14 14 views
10

私はscheduledTimerWithTimeIntervalで関数呼び出しを行っています。私はちょうどxmlの解析が完了したかどうかをチェックしています。特定のWebサービスに対しては成功した応答を取得した後にdidEndElementメソッドでタイマーを無効にします。scheduledTimerWithTimeIntervalとiOS 5.0で遅延してperformselectorを比較

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

私はiOS 5.0の問題と他のiOSバージョンで問題なく直面しています。 iOS 5.0では、関数を無効にしていても関数はいつでも呼び出すことができます。あなたがそれを解決する方法があれば教えてください。

今、performSlectorをdelayで実装し、stopWSにブール変数を設定して、解析が完了したかどうかを確認します。私はちょうどそこにこれの間に大きな違いがあることを知りたいですか?このソリューションは私の問題のために働くのですか?

他の方法がある場合は、おかげです。

+1

私はあなたが探しているものを理解していません。メソッドを常に呼びたいのですか?またはそれを無効にして呼び出されないようにしたいですか?それははっきりしない。 – Oliver

+0

私はちょうどiOS 5.0の問題に直面しているので、私はちょうどscheduleTimerWithTimeInterval対深さの遅れとperformselectorの違いを知りたいです。 –

+0

そして、この問題は何ですか?あなたはあなたの質問でそれについて話しますが、それは明らかではありません。 – Oliver

答えて

21

はあなたの違い

performSelectorWithObjectAfterDelay

  • ある指定した秒数後にセレクタを実行します。 ONCE

  • ここで取り組む必要があるのは、セレクタが実行されているオブジェクトがリリースされる前に以前の実行要求をキャンセルする必要があることです。そのためには、cancelPerformSelectorメソッドを使用します。

scheduledTimerWithTimeInterval

  • この方法は、あなたにあまりにも指定された期間の後にセレクタを呼び出す機能を提供しますが、それはまた、パラメータ[繰り返し:]はあなたが、繰り返し同じセレクタを呼び出すことができます

  • 呼び出しセレクタに呼び出しを渡すこともできます。これは、セレクタで多くの引数が必要な場合に特に役立ちます。

  • タイマーが不要になったら無効にする必要があります。これはトリックを行う必要があります

    [myTimer invalidate]; myTimer = nil;

これはNSTimerの最も決定的なスレッドです。ご覧ください。 How do I use NSTimer?

0

performSelectorWithObjectAfterDelay、次にcancelPerformSelectorを使用して不要になった場合は中止することができます。タイマーへの参照を保存する必要がないので、これはscheduledTimerWithTimeIntervalより簡単だと思います。ほとんどの場合、これらの2つのアプローチは同じように動作するはずです。名前が示すようにここで

+0

タイマーリファレンスを保存する必要はありません。ループに追加されたら、cancelPerformSelectorと同じようにキャンセルするには参照が必要です。それ以外の場合、1回の発砲でタイマーを作ることができます。 – David

+0

主な相違点は、質問者が必要と思われる、それをキャンセルしたいときです。 cancelPerformSelectorでは、オブジェクトへの参照だけが必要です。通常は、それはおそらくとにかくアクセスできます(おそらくそれは単なる自己です)。タイマーをキャンセルするには、おそらくインスタンス変数として、タイマーをどこかに格納しておく必要があります。 – zeroimpl

関連する問題