博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSTimer内存方面的探究
阅读量:4342 次
发布时间:2019-06-07

本文共 1069 字,大约阅读时间需要 3 分钟。

今天研究一个框架,看到它对NSTimer的处理,感觉很有意思。于是自己在各种情况下都研究了一下,现总结如下。

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

所以,最终的解决方法应是在要释放NStimer所在类之前,invalidate它。

1.在UIView中

 可以写在

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

例如:

- (void)willMoveToSuperview:(UIView *)newSuperview{            if (!newSuperview) {//从父控件移除时        [self.timer invalidate];        self.timer = nil;    }    NSLog(@"willMoveToSuperview");}

2.UIViewController中

 ---push

    

- (void)willMoveToParentViewController:(UIViewController *)parent{        if (!parent) {        [self.timer invalidate];        self.timer = nil;    }  }

 

--present

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion{        [self.timer invalidate];    self.timer = nil;    [super dismissViewControllerAnimated:flag completion:completion];}

 

3.NSObject

  这个我没找到方法,就自己写一个比如dismissAll的方法,然后在释放此对象之前调用这个方法即可。

 

总之原理就是,不管怎样,只要需要释放有NSTimer的类,就在释放它之前把它invalidate掉,不管是调用系统方法还是自定义方法。

 

转载于:https://www.cnblogs.com/yintingting/p/5402448.html

你可能感兴趣的文章
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
Equivalent Strings
查看>>
flume handler
查看>>
收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
查看>>
H5 表单标签
查看>>
C语言编程-9_4 字符统计
查看>>
在webconfig中写好连接后,在程序中如何调用?
查看>>
限制用户不能删除SharePoint列表中的条目(项目)
查看>>
feign调用spring clound eureka 注册中心服务
查看>>
ZT:Linux上安装JDK,最准确
查看>>
LimeJS指南3
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>
微信测试账户
查看>>
Android ListView上拉获取下一页
查看>>
算法练习题
查看>>
学习使用Django一 安装虚拟环境
查看>>