NSTimerの使い方は?質問する

NSTimerの使い方は?質問する

はどのように使用すればいいですかNSTimer? 誰かステップバイステップの説明を教えてくれませんか?

ベストアンサー1

まず、Cocoa/CF ドキュメントに注目していただきたいと思います (これは常に最初の参照先として最適です)。Apple ドキュメントには、各リファレンス記事の先頭に「コンパニオン ガイド」というセクションがあり、ドキュメント化されているトピックのガイド (存在する場合) がリストされています。たとえばNSTimerドキュメント2 つの関連ガイドをリストします。

あなたの状況では、タイマー プログラミング トピックの記事が最も役立つと思われます。スレッド トピックは関連していますが、ドキュメント化されているクラスに最も直接関連しているわけではありません。タイマー プログラミング トピックの記事を見ると、2 つの部分に分かれています。

  • タイマー
  • タイマーの使用

この形式の記事では、多くの場合、クラスの概要とその用途、そして使用方法に関するサンプル コードが示されます (この場合は「タイマーの使用」セクション)。「タイマーの作成とスケジュール設定」、「タイマーの停止」、および「メモリ管理」のセクションがあります。記事によると、スケジュールされた非繰り返しタイマーの作成は、次のように実行できます。

[NSTimer scheduledTimerWithTimeInterval:2.0
    target:self
    selector:@selector(targetMethod:)
    userInfo:nil
    repeats:NO];

これにより、2.0 秒後に起動され、インスタンスへのポインターである 1 つの引数で呼び出さtargetMethod:れるタイマーが作成されます。selfNSTimer

メソッドをさらに詳しく確認したい場合は、ドキュメントを参照して詳細を確認してください。また、コードに関する説明もあります。

繰り返し実行されるタイマーを停止したい場合 (または、実行前に繰り返し実行されないタイマーを停止したい場合)、作成されたインスタンスへのポインタを保持する必要があります。多くの場合、別のメソッドで参照できるように、インスタンス変数にする必要があります。その後、インスタンスをNSTimer呼び出すことができます。invalidateNSTimer

[myTimer invalidate];
myTimer = nil;

インスタンス変数を out にすることも良い方法ですnil(たとえば、タイマーを無効にするメソッドが複数回呼び出され、インスタンス変数が設定されておらずnilNSTimerインスタンスが解放されている場合、例外がスローされます)。

記事の下部にあるメモリ管理に関するポイントにも注意してください。

実行ループがタイマーを維持するため、メモリ管理の観点からは、タイマーをスケジュールした後は、通常、タイマーへの参照を維持する必要はありません。タイマーは、そのメソッドをセレクターとして指定するときに引数として渡されるため、そのメソッド内で適切な場合に繰り返しタイマーを無効化できます。ただし、多くの場合、タイマーを無効にするオプションも必要になります (開始前でも可能)。この場合は、適切な場合に無効化メッセージを送信できるように、タイマーへの参照を維持する必要があります。スケジュールされていないタイマーを作成する場合 (「スケジュールされていないタイマー」を参照)、タイマーを使用する前に割り当て解除されないように、タイマーへの強い参照を維持する必要があります (参照カウント環境では、参照を保持します)。

おすすめ記事