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

2018-03-16  本文已影响0人  DonfexCui

今天检测内存泄漏发现一个子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中释放也行。

上一篇下一篇

猜你喜欢

热点阅读