12

self.timer=nil誰かが私を説明できます[self.timer invalidate]か?

のメモリ位置で正確に何が起こりself.timerますか?

私のコードでは

self.timer=nil

タイマーは止まりませんが、

[self.timer invalidate]

タイマーを停止します。

私のコードが必要な場合は、それも更新します。

4

3 に答える 3

11

タイマーを実行する必要がなくなったら、タイマー オブジェクトを無効にします。その後、その参照を無効にする必要はありません。

これはAppleのドキュメントに次のように書かれています:NSTimer

実行ループでスケジュールされると、タイマーは無効になるまで指定された間隔で起動します。非反復タイマーは、開始直後に無効になります。ただし、繰り返しタイマーの場合は、その無効化メソッドを呼び出して、タイマー オブジェクトを自分で無効にする必要があります。このメソッドを呼び出すと、現在の実行ループからタイマーを削除するように要求されます。そのため、タイマーがインストールされた同じスレッドから常に無効化メソッドを呼び出す必要があります。タイマーを無効にするとすぐに無効になり、実行ループに影響しなくなります。次に、実行ループは、invalidate メソッドが戻る直前または後の時点で、タイマー (およびタイマーへの強力な参照) を削除します。一度無効化されたタイマー オブジェクトは再利用できません。

于 2014-12-11T06:50:20.850 に答える
1

まず、現在実行中のタイマーを停止するために使用できるクラスinvalidateのメソッドです。次に、オブジェクトにNSTimer割り当てると、ARC環境で変数がオブジェクトを解放します。nil

必要がなくなったときにタイマーの実行を停止することが重要です。そのため、書き込み[timer invalidate]を行ってから書き込みtimer = nil;を行い、メモリからアドレスを失い、後でタイマーを再作成できるようにします。

于 2014-12-11T06:51:33.557 に答える