使属于 UIView 子类的计时器无效
Posted
技术标签:
【中文标题】使属于 UIView 子类的计时器无效【英文标题】:Invalidate a timer that belongs to a UIView subclass 【发布时间】:2013-02-04 11:55:13 【问题描述】:我有一个属于 UIView 子类的重复计时器。
该类有一个可以加载它的 nib,我正在使用 ARC。
当 UIView 是...时,我想使计时器无效...
-
已从其超级视图中删除
包含其 superView 的 ViewController 从堆栈中弹出。
我似乎在 UIView 上找不到类似 viewDidDisappear 的方法。
还有其他方法可以拦截吗?
目前,在 ViewController 弹出后,计时器不断触发并创建 NSLog
输出。
【问题讨论】:
【参考方案1】:对于弹出的视图控制器:只需使用viewDidDisappear
或类似名称。还有UINavigationControllerDelegate
可能有用。
对于视图本身:您是否尝试过在UIView
中使用willMoveToSuperview:
方法?我尚未对此进行验证,但理论上,当视图从其父视图中删除时,该视图将移至父视图 nil
。
所以在你的观点中尝试以下方法:
- (void)willMoveToSuperview:(UIView *)superview
if (!superview)
// cancel timers
还有一个willRemoveSubview:
方法,但它会在父视图上调用,而不是被删除的视图。
【讨论】:
【参考方案2】:您是否尝试过在dealloc
中使其无效
【讨论】:
以上是关于使属于 UIView 子类的计时器无效的主要内容,如果未能解决你的问题,请参考以下文章
使 UIViewController 中的 NSTimer 无效以避免保留周期的最佳时间