引言
定时器:A timer waits until a certain time interval has elapsed and then fires, sending a specified message to a target object.
翻译如下:在固定的时间间隔被触发,然后给指定目标发送消息。总结为三要素吧:时间间隔、被触发、发送消息(执行方法)
按照官方的描述,我们也确实是这么用的;但是里面有很多细节,你是否了解呢?
它会被添加到runloop,否则不会运行,当然添加的runloop不存在也不会运行;
还要指定添加到的runloop的哪个模式,而且还可以指定添加到runloop的多个模式,模式不对也是不会运行的
runloop会对timer有强引用,timer会对目标对象进行强引用(是否隐约的感觉到坑了。。。)
timer的执行时间并不准确,系统繁忙的话,还会被跳过去
invalidate调用后,timer停止运行后,就一定能从runloop中消除吗,资源????
呵呵。。。下面会解决这些问题
定时器的一般用法
控制器中添加定时器,例如:
- (void)viewDidLoad { NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate date] interval:1 target:self selector:@selector(timerFire) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; self.timer = timer; } - (void)timerFire { NSLog(@"timer fire"); }
上面的代码就是我们使用定时器最常用的方式,可以总结为2个步骤:创建,添加到runloop
系统提供了8个创建方法,6个类创建方法,2个实例初始化方法。
有三个方法直接将timer添加到了
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26
学习是年轻人改变自己的最好方式