NSTimer

作者: 每日总结 | 来源:发表于2016-03-29 15:06 被阅读191次

NSTimer 是一个定时器,可以完成任何定时功能;
NSTimer不是绝对精确的,中间耗时或阻塞错过下一个点,那么下一个点就pass过去了,Timer可以精确到50-100毫秒

初始化

+ (NSTimer *)scheduledTimerWithTimerInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
//scheduled方法会将Timer默认添加到当前runloop中,如果不用scheduled方法,我们需要手动addTimer:forMode: 将timer添加到一个runloop中。
// TimeInterval:
// 表示输入一个时间间隔,CGFloat,以秒为单位
// target:
// 表示发送的对象
// selector:
// 方法选择器
// userInfo:
// 此参数可以为nil,当定时器失效时,由你指定的对象保留和释放该定时器
// repeats:
// 当YES时,定时器会自动循环直到失效或被释放,当NO时,只会执行一次方法

NSTimer初始化中设为target的对象将被强引用一次,所以一般需要在viewWillDisappear等方法中[timer invalidate]将timer无效化,并赋空

启动Timer

- (void)fire;
// 这个方法是立即执行一次Timer中的方法,实际上当我们初始化了一个timer后,会在指定的timerInteval秒后自动触发
// 在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;
// 在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。

停止Timer

-(void)invalidate;
//用此方法停止之后要将timer赋空(timer = nil)
// 这是唯一一个可以将计时器从runloop中移出的方法。

注:
如果我们需要自定义一个计时器,注意不可以设为NSTimer的子类,因为NSTimer是一个虚类,其方法实现都是在其子类相应中实现的,所以如果我们自定义NSTimer的子类,在重写方法中写[super init....]等实现时会报错,因为NSTimer中根本没有对应方法的实现

参考资料以及扩展:一个可以暂停和重启的定时器分类

http://blog.csdn.net/samuelltk/article/details/7484533
博主:蓝天客

相关文章

网友评论

    本文标题:NSTimer

    本文链接:https://www.haomeiwen.com/subject/tqqslttx.html