我有一个 UIView 子类,在某些情况下我需要改变它的颜色一段时间,比如 5 秒,然后改变颜色,我使用的方法是performSelector:afterDelay:
,我传入的选择器是改变颜色,我想知道如果在触发颜色更改方法之前从超级视图中删除视图,那么它会导致任何问题吗?还是因为视图对象本身不存在而没有调用它?
谢谢!
我有一个 UIView 子类,在某些情况下我需要改变它的颜色一段时间,比如 5 秒,然后改变颜色,我使用的方法是performSelector:afterDelay:
,我传入的选择器是改变颜色,我想知道如果在触发颜色更改方法之前从超级视图中删除视图,那么它会导致任何问题吗?还是因为视图对象本身不存在而没有调用它?
谢谢!
当您发送performSelector:withObject:afterDelay:
到您的视图时,视图本质上会创建一个计时器。计时器保留视图和参数对象(UIColor
在您的情况下可能是 a )。因此,即使您从其父视图中删除该视图,计时器仍会保留该视图并防止它被释放。
当计时器触发时,它将更改(屏幕外)视图的背景颜色,然后释放视图。如果这是对视图的最后一个强引用,则视图将被释放。
当您更改不在窗口层次结构中的视图的背景颜色时,视图只会记住其新的背景颜色设置,但不会做任何其他事情,例如尝试在屏幕上绘制自己。
因此performSelector:withObject:afterDelay:
,即使您在延迟到期之前将视图从其超级视图中删除,使用更改视图的背景颜色也不应该导致任何问题。