UIView的生命周期:善用willMoveToSuperVie

作者: jlstmac | 来源:发表于2018-03-01 16:38 被阅读43次

UIView的生命周期是通常会被忽略的一个问题,因为我们有UIViewController自动管理UIView的生命周期。但是了解UIView的生命周期是很有用的。
在开发一个需求的时候,不得不在UIView的一个子类中调用performSelector:这个方法去执行延时操作

[self performSelector:@selector(p_countingAction) withObject:nil afterDelay:self.countingDelay inModes:[NSArray arrayWithObjects:UITrackingRunLoopMode, NSDefaultRunLoopMode,nil]];

大家都知道performSelector:会引用调用它的对象,如果在延时正在执行的时候退出这个View所在的UIViewController这个View是不会释放的,造成内存泄漏。解决方法是在View释放之前调用cancelPreviousPerformRequestsWithTarget:方法释放view。

[NSObject cancelPreviousPerformRequestsWithTarget:self];

如果这里是一个UIViewController 调用就好说了,因为UIViewController有viewWillDisappear和viewDidDisappear方法。直接在这个方法里调用就ok了。但是这是在view里调用的,所以就要用到willMoveToSuperView:。

- (void) willMoveToSuperView:(UIWindow *)newSuperView{
    if (! newSuperView) {
        [NSObject cancelPreviousPerformRequestsWithTarget:self];
    }
}

结论:
willMoveToSuperView:这个方法是在视图即将加入或者移除某个window时调用。如果 newWindow为空就表示移除,也就是view即将被销毁。类似于UIViewController的viewWillDisappear方法。

相关文章

网友评论

    本文标题:UIView的生命周期:善用willMoveToSuperVie

    本文链接:https://www.haomeiwen.com/subject/hozgxftx.html