NSTimer使用注意事项
来源:互联网 发布:广联达钢筋抽样软件 编辑:程序博客网 时间:2024/05/17 06:08
1.scheduled开头和非schedule的开头方法的区别。系统框架提供了几种创建NSTimer的方法,其中以scheduled开头的方法会自动把timer加入当前run loop,到了设定的时间点就会触发指定的方法,而没有scheduled开头的方法则需要程序员自己手动添加到timer到一个run loop中才会有效。run loop在运行时一般有两个mode,一个defaultmode,一个trackingmode,正常情况下run loop使用defaultmode,scheduled生成的timer会默认添加到defaultmode中,当我们互动scrollview时,run loop切换到trackingmode运行,于是我们发现定时器失效了。为了使定时器在我们滑动scrollview时也能正常运行,我们需要确保defaultmode和trackingmode里都添加了我们生成的timer。如:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:_timeInterval target:self selector:@selector(addone) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
或者:
NSTimer *timer = [NSTimer timerWithTimeInterval:_timeInterval target:self selector:@selector(addone) userInfo:nil repeats:YES];[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
2.使用NSTimer时,timer会保持对target和userInfo参数的强引用。只有当调取了NSTimer的invalidate方法时,NSTimer才会释放target和userInfo。生成timer的方法中如果repeats参数为NO,则定时器触发后会自动调取invalidate方法。如果repeats参数为YES,则需要程序员手动调取invalidate方法才能释放timer对target和userIfo的强引用。
3.在使用repeats参数为YES的定时器时,如果在使用完定时器时后没有调取invalidate方法,导致target和userInfo没有被释放,则可能会形成循环引用情况,从而影响内存释放。
- iOS NSTimer使用注意事项
- NSTimer使用注意事项
- NSTimer使用注意事项
- 关于NSTimer的使用注意事项
- IOS 中NSTimer使用注意事项
- NSTimer 注意事项
- NSTimer 进阶使用总结与注意事项
- NSTimer使用机及其注意事项(一)
- iOS --- 使用NSTimer设置定时任务的注意事项
- NSTimer初始化及注意事项
- NSTimer使用
- NSTimer使用
- NSTimer 使用
- NSTimer使用
- NSTimer使用
- NSTimer 使用
- NSTimer 使用
- 关于NSTimer的一些注意事项
- 二叉树的深度和路径和问题
- 4.2 模拟域频域变换
- C++ STL priority_queue
- [Unity&Photon]Photon Chat 对话框测试
- 正则表达式
- NSTimer使用注意事项
- js一次性输入一个数组求平均值
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛F(矩阵快速幂)
- python学习日记(6)
- 国际国家代码与区号查询
- 【转载】简单词法分析器的实现
- 多线程死锁的一个简单例子
- Docker初识
- 4.3 脉冲响应不变法