关于NSTimer的释放(UIView和VC中)

今天检测内存泄漏发现一个子view不执行dealloc方法,查找资料后发现跟NSTimer有关,做下笔记:

平时我们用NSTimer时,习惯在dealloc方法中把它invalidate掉并置nil,但是发现这样写并没有作用,NSTimer所在的类并没有被释放掉,而是继续执行NSTimer的方法。

所以,我们应该在要释放NStimer所在类之前,invalidate它。

1.在UIView中

 可以写在

- (void)willMoveToSuperview:(UIView *)newSuperview中,这个方法是把view添加到父控件或从父控件移除掉时会调用。

2.UIViewController中

如果是push在

- (void)willMoveToParentViewController:(UIViewController *)parent 中释放timer。


如果是present在

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void(^)(void))completion 中释放timer


ps:如果是vc,在willDismiss中释放也行。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容