Timer定时器
来源:互联网 发布:工资考勤软件 验厂 编辑:程序博客网 时间:2024/06/10 21:21
Timer定时器
预防Timer循环引用,内存泄漏
⚠️在iOS开发过程中,NSTimer 是我们经常要使用的类。但是稍不注意,就会导致内存泄漏,调用profile的Leaks工具时会发现MyViewController退出之后,就会检测到内存泄漏。
fileprivate var myTimer: Timer?self.myTimer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(myTimerAction), userInfo: nil, repeats: true)
Xcode Guide :“ The object to which to send the message specified by aSelector when the timer fires. The timer maintains a strong reference to target until it (the timer) is invalidated.“
原来Timer调用scheduledTimer时,会强引用target,导致互相强引用
解决办法:
-(void) viewDidDisappear { [super viewDidDisappear]; self.myTimer.invalidate() self.myTimer = nil}
千万不要将上述代码放到deinit里面,因为循环引用之后MyViewController对象不会释放,deinit将永远不会被调用。你可以重载viewDidDisappear,放到里面去。或者确定不需要定时器时,及时销毁定时器。
iOS10.0+
weak var weakSelf = selfTimer.scheduledTimer(withTimeInterval: interval, repeats: true, block:{(timer: Timer) -> Void in weakSelf?.doSomething()})
总结:
- 当调用Apple的API时,需要传递类对象self本身的,我们一定要看清文档,self会不会被保留强引用(MAC时代的被retain)
- 当self被强引用时,像Timer一样,增加类似的一个扩展,或者可以很好的解决问题
- Block模版类,或许可以很优雅的解决你所遇到的问题
阅读全文
0 0
- Timer 定时器
- TIMER 定时器
- timer 定时器
- timer 定时器
- timer定时器
- 定时器 Timer
- 定时器Timer
- timer定时器
- Timer 定时器
- Timer定时器
- 定时器TIMER
- 定时器Timer
- timer定时器
- Timer 定时器
- Timer定时器
- 定时器 timer
- 定时器 Timer
- Timer定时器
- hdu6069 Counting Divisors(质数分解+技巧)
- 百度搜索高级语法技巧
- uva-572 种子填充floodfill
- Educational Codeforces Round 26;A. Text Volume
- 整数算法训练03—输入5个数(含负数、小数)将它们按由小到大的顺序排列起来
- Timer定时器
- hbase分布式集群安装
- 字符串训练——求字符串长度、去掉空格
- 使用动画绘制飘动的云朵
- HTML&CSS基础篇之十:CSS基础
- HTML中meta标签的作用与使用
- C# Foreach循环本质与枚举器
- ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password)
- Eclipse中修改SVN用户名和密码方法[转]