viewdidload で開始する NSTimer がある場合、そのビューを離れるときにそれを無効にする適切な場所はどこですか? それもリリースする必要がありますか?
2696 次
1 に答える
5
NSTimerscheduledTimerWithTimeInterval... でタイマーを作成する場合は、所有していないため、解放する必要はありません。
ここで重要なことは、timer クラスがターゲットを保持していることです。ほとんどの場合、self をターゲットとして使用します。タイマーが反復的でない場合、タイマー ハンドラーが完了すると、タイマー ハンドラーは自動的に無効になり、ターゲットは解放されます。だからあなたは何もする必要はありません。ただし、ビューを離れるときにタイマーがまだ保留中の場合 (これは、タイマーが起動する前に離れるか、タイマーが繰り返される場合に発生します)、それを無効にする必要があります。場所は dealloc メソッドであってはなりません。タイマー自体がターゲットを保持するため、タイマーが無効になるまで dealloc は呼び出されません。
したがって、これが不要になったことがわかっている場合は、無効にすることをお勧めします。これは、別のビューに移動するアクションである可能性があります。ユーザーがボタンをタップし、ボタン ハンドラーで他のビューに移動するとします。このボタン ハンドラで無効にすることができます。
于 2010-08-17T03:27:35.703 に答える