私はUIViewサブクラスを持っていますが、場合によっては、その色を一定期間、たとえば5秒間変更してから、色を元に戻す必要があります。使用した方法performSelector:afterDelay:
と、渡したセレクターは、色を元に戻すことです。色変更メソッドが実行される前に、ビューがスーパービューから削除された場合、問題は発生しますか?または、ビューオブジェクト自体が存在しないため、呼び出されないだけですか?
ありがとう!
私はUIViewサブクラスを持っていますが、場合によっては、その色を一定期間、たとえば5秒間変更してから、色を元に戻す必要があります。使用した方法performSelector:afterDelay:
と、渡したセレクターは、色を元に戻すことです。色変更メソッドが実行される前に、ビューがスーパービューから削除された場合、問題は発生しますか?または、ビューオブジェクト自体が存在しないため、呼び出されないだけですか?
ありがとう!
ビューに送信performSelector:withObject:afterDelay:
すると、ビューは基本的にタイマーを作成します。タイマーは、ビューと引数オブジェクト (おそらくUIColor
あなたの場合は a) を保持します。そのため、スーパービューからビューを削除しても、タイマーは引き続きビューを保持し、割り当てが解除されるのを防ぎます。
タイマーが起動すると、(画面外の) ビューの背景色が変更され、ビューが解放されます。それがビューへの最後の強い参照であった場合、ビューは割り当て解除されます。
ウィンドウ階層に含まれていないビューの背景色を変更すると、ビューは新しい背景色の設定を記憶するだけで、画面に自分自身を描画しようとするなどのことは何もしません。
したがって、 を使用performSelector:withObject:afterDelay:
してビューの背景色を変更しても、遅延が期限切れになる前にスーパービューからビューを削除しても問題は発生しません。