0

私はUIViewサブクラスを持っていますが、場合によっては、その色を一定期間、たとえば5秒間変更してから、色を元に戻す必要があります。使用した方法performSelector:afterDelay:と、渡したセレクターは、色を元に戻すことです。色変更メソッドが実行される前に、ビューがスーパービューから削除された場合、問題は発生しますか?または、ビューオブジェクト自体が存在しないため、呼び出されないだけですか?

ありがとう!

4

1 に答える 1

2

ビューに送信performSelector:withObject:afterDelay:すると、ビューは基本的にタイマーを作成します。タイマーは、ビューと引数オブジェクト (おそらくUIColorあなたの場合は a) を保持します。そのため、スーパービューからビューを削除しても、タイマーは引き続きビューを保持し、割り当てが解除されるのを防ぎます。

タイマーが起動すると、(画面外の) ビューの背景色が変更され、ビューが解放されます。それがビューへの最後の強い参照であった場合、ビューは割り当て解除されます。

ウィンドウ階層に含まれていないビューの背景色を変更すると、ビューは新しい背景色の設定を記憶するだけで、画面に自分自身を描画しようとするなどのことは何もしません。

したがって、 を使用performSelector:withObject:afterDelay:してビューの背景色を変更しても、遅延が期限切れになる前にスーパービューからビューを削除しても問題は発生しません。

于 2012-11-13T22:27:23.860 に答える