self.timer=nil
誰かが私を説明できます[self.timer invalidate]
か?
のメモリ位置で正確に何が起こりself.timer
ますか?
私のコードでは
self.timer=nil
タイマーは止まりませんが、
[self.timer invalidate]
タイマーを停止します。
私のコードが必要な場合は、それも更新します。
self.timer=nil
誰かが私を説明できます[self.timer invalidate]
か?
のメモリ位置で正確に何が起こりself.timer
ますか?
私のコードでは
self.timer=nil
タイマーは止まりませんが、
[self.timer invalidate]
タイマーを停止します。
私のコードが必要な場合は、それも更新します。
タイマーを実行する必要がなくなったら、タイマー オブジェクトを無効にします。その後、その参照を無効にする必要はありません。
これはAppleのドキュメントに次のように書かれています:NSTimer
実行ループでスケジュールされると、タイマーは無効になるまで指定された間隔で起動します。非反復タイマーは、開始直後に無効になります。ただし、繰り返しタイマーの場合は、その無効化メソッドを呼び出して、タイマー オブジェクトを自分で無効にする必要があります。このメソッドを呼び出すと、現在の実行ループからタイマーを削除するように要求されます。そのため、タイマーがインストールされた同じスレッドから常に無効化メソッドを呼び出す必要があります。タイマーを無効にするとすぐに無効になり、実行ループに影響しなくなります。次に、実行ループは、invalidate メソッドが戻る直前または後の時点で、タイマー (およびタイマーへの強力な参照) を削除します。一度無効化されたタイマー オブジェクトは再利用できません。
まず、現在実行中のタイマーを停止するために使用できるクラスinvalidate
のメソッドです。次に、オブジェクトにNSTimer
割り当てると、ARC環境で変数がオブジェクトを解放します。nil
必要がなくなったときにタイマーの実行を停止することが重要です。そのため、書き込み[timer invalidate]
を行ってから書き込みtimer = nil;
を行い、メモリからアドレスを失い、後でタイマーを再作成できるようにします。