疑难点积累(二)
来源:互联网 发布:淘宝龙瞎多少钱 编辑:程序博客网 时间:2024/05/18 07:40
1、NSTimer的使用
参考文章:http://www.cnblogs.com/smileEvday/archive/2012/12/21/NSTimer.html这里有详细的验证和说明
(1)timer会对它的target进行retain,直到timer自己失效为止。对重复执行的timer必须调用invalidate才能停止timer,让timer失效。
(2)timer并不是一种实时机制,不是你指定1s后执行,1s后就会立即执行。当线程空闲的时候,timer的触发时间还是比较准确的。但是当到达timer的触发时间时,线程却在执行一个连续的运算块,这个时候,timer只能等这个运算块执行完了,才能执行它自己的方法。如果这个线程的执行的时间超过了timer的一个周期,timer并不会触发两次消息,而只是触发一次。等线程忙完后,后面的消息触发时间仍然是与timer开始指定的时间成整数倍。所以说,timer并不会因为触发延迟而导致后面的触发时间发生延迟。
(3)timer也是一种资源,一个资源如果要起作用就得加到线程的runloop中,所以timer要加到runloop中才有用。如果一个runloop不包含任何资源,那他一运行就会马上退出。
A、使用 scheduledTimerWithTimeInterval:invocation:repeats: 或者scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: 这两个类方法创建一个timer会把timer指定到一个默认的runloop模式中。
B、使用 timerWithTimeInterval:invocation:repeats: 或者 timerWithTimeInterval:target:selector:userInfo:repeats:这两个类方法创建一个timer的对象,你必须手动的调用NSRunLoop下对应的方法 addTimer:forMode: 去将timer指定到一个runloop模式中。
C、 使用 initWithFireDate:interval:target:selector:userInfo:repeats: 方法分配并创建一个NSTimer的实例,当创建之后,你必须手动的调用NSRunLoop下对应的方法 addTimer:forMode: 去将它指定到一个runloop模式中。
(4)如何让timer在子线程的runloop中跑起来?
每个线程都有自己的runloop,新的线程的runloop必须自己去启动。
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];//将timer加到子线程的runloop中
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];//启动子线程的runloop
- 疑难点积累(二)
- 疑难知识点积累
- 编程疑难点
- 多态疑难点
- c疑难点
- Android疑难点解答
- C/C++ 疑难点(不断更新中……)
- 积累(二)
- 点滴积累(二)
- 平时积累(二)
- 知识点积累(二)
- JavaScript 中的疑难杂点
- java 线程之疑难点
- Java多线程基础知识疑难点
- Python知识疑难点汇集
- IOS开发各种疑难 二
- 程序积累二(C)
- 面试题积累(二)
- poj 2253(3种最短路搞法)
- CSDN高校俱乐部有奖调查:实习就业需求调研
- 设计模式之模板方法模式
- dscp
- ngui 做技能冷却
- 疑难点积累(二)
- 一些题:面面准备
- 双显示器任务栏 Dual Monitor Taskbar
- C#获取文件夹下的所有文件的文件名
- Spring mvc 项目中页面访问不到静态文件,如img , js , css 等
- 创业者们的十大迷思
- wince 隐藏任务栏
- 关于stuts2文件上传出错java.lang.NoSuchMethodException: com.cn.file.upload.UploadFile.uploadfile()
- python中的迭代器和生成器(一)——迭代器