NSTimer 知识点记录
来源:互联网 发布:淘宝爆款打造教程 编辑:程序博客网 时间:2024/06/03 19:56
声明:以下内容,大部分属于转载内容,仅供自己学习参考
定时器的概念和其他平台的概念无异,创建一个定时器、可暂停、继续和停止。计数值满了会调用指定的处理方法。
NSTimer其实是将一个监听加入到系统的RunLoop中去,当系统runloop循环执行到timer条件满足时,会调用timer一次,当timer执行完,也就是回调函数(处理方法)执行之后,timer会再一次的将自己加入到runloop中去继续监听。
CFRunLoopTimerRef 和 NSTimer这两个类型是可以互换的, 当我们在传参数的时候,看到CFRunLoopTimerRef可以传NSTimer的参数,增加强制转化来避免编译器的警告信息
一个timer对象在同一时间只能够被注册到一个runloop中,尽管在这个runloop中它能够被添加到多个runloop中模式中去。
定时器的创建有以下三种方法:
scheduledTimerWithTimeInterval: invocation: repeats: 或者scheduledTimerWithTimeInterval: target: selector: userInfo: repeats: 这两个类方法创建一个timer,并把它指定到一个默认的runloop模式中。
timerWithTimeInterval:invocation:repeats: 或者 timerWithTimeInterval:target:selector:userInfo:repeats:这两个类方法创建一个timer的对象,不会把它添加到默认的runloop模式中。 (当创建之后,你必须手动的调用NSRunLoop下对应的方法 addTimer:forMode: 去将它制定到一个runloop模式中.)
initWithFireDate:interval:target:selector:userInfo:repeats: 方法分配并创建一个NSTimer的实例 (当创建之后,你必须手动的调用NSRunLoop下对应的方法 addTimer:forMode: 去将它制定到一个runloop模式中.)
target:(id) aTarget 表示发送的对象,如self
selector:(SEL)a Selector 方法选择器,在时间间隔内,选择调用一个实例方法
userInfo:(id)userInfo 此参数可以为nil,当定时器失效时,由你指定的对象保留和释放该定时器。
repeats:(BOOL)yes Or No 当YES时,定时器会不断循环直至失效或被释放,当NO时,定时器会循环发送一次就失效。
实例代码片段
//创建一个定时器,以10s 为间隔,时间到了会调用DownLoadThread方法。定时器一次计数完成,会继续加入runloop进行下一次计数NSTimer time = [NSTimer timerWithTimeInterval:10 target:self selector:@selector(DownLoadThread:) userInfo:self repeats:YES ];//将定时器添加到 当前的RunLoop中默认模式[[NSRunLoop currentRunLoop] addTimer:time forMode:NSDefaultRunLoopMode];[time fire];// 可以通过fire这个方法去触发timer,即使timer的firing time没有到达 [time setFireDate:[NSDate distanPast]] //NSTimer 开启[time setFireDate:[NSDate distantFunture]] //NSTimer 关闭 //在invalidate之前最好先用isValid先判断是否还在线程中:if ([scrollTimer isValid] == YES) { [scrollTimer invalidate]; scrollTimer = nil;}//定时器暂停与继续的简要方法:[time setFireDate:[NSDate date]]; //继续。[time setFireDate:[NSDate distantPast]];//开启[time setFireDate:[NSDate distantFuture]];//暂停
-(void)fire; //立即触发定时器
- (NSDate *)fireDate;//开始时间
- (void)setFireDate:(NSDate *)date;//设置fireData,其实暂停、开始会用到
- (NSTimeInterval)timeInterval;//延迟时间
- (void)invalidate;//停止并删除
- (BOOL)isValid;//判断是否valid
- (id)userInfo;//通常用nil
使用NSTimer实现倒计时的一个例子:
在viewDidLoad中添加如下代码,每秒出发一次
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES]; //使用timer定时,每秒触发一次,然后就是写selector了,时间到达调用timerFireMethod方法。- (void)timerFireMethod:(NSTimer*)theTimer{ NSCalendar *cal = [NSCalendar currentCalendar];//定义一个NSCalendar对象 NSDateComponents *endTime = [[NSDateComponents alloc] init]; //初始化目标时间 [endTime setYear:2008]; [endTime setMonth:8]; [endTime setDay:8]; [endTime setHour:8]; [endTime setMinute:8]; [endTime setSecond:8]; NSDate *todate = [cal dateFromComponents:endTime]; //把目标时间装载入date [endTime release]; NSDate *today = [NSDate date]; //得到当前时间 //用来得到具体的时差 unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; NSDateComponents *d = [cal components:unitFlags fromDate:today toDate:todate options:0]; NSLog(@"%d年%d月%d日%d时%d分%d秒",[d year],[d month], [d day], [d hour], [d minute], [d second]);}
- NSTimer 知识点记录
- NSTimer知识点
- NSTimer知识点
- 常用知识点-NSTimer
- UIScrollView、UIPageControl、NSTimer知识点回顾
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- NSTimer知识点和倒计时的实现
- [Machine Learning] Neural Network
- java开发俄罗斯方块学习笔记 Day-8 配置
- 透视校正
- Core Data
- android 链接 javascript
- NSTimer 知识点记录
- win7 下ffmpeg release 版本崩溃问题
- Java NIO学习笔记之二-图解ByteBuffer
- 定时自动执行SQL存储过程(图文详解)
- 类中的静态成员小总结
- 抽象类与接口的区别:
- 137,单例模式
- 兄弟连猿代码less css 视频教程学习平台
- Android ActionBar