引言
定時(shí)器:A timer waits until a certain time interval has elapsed and then fires, sending a specified message to a target object.
翻譯如下:在固定的時(shí)間間隔被觸發(fā),然后給指定目標(biāo)發(fā)送消息??偨Y(jié)為三要素吧:時(shí)間間隔、被觸發(fā)、發(fā)送消息(執(zhí)行方法)
按照官方的描述,我們也確實(shí)是這么用的;但是里面有很多細(xì)節(jié),你是否了解呢?
它會(huì)被添加到runloop,否則不會(huì)運(yùn)行,當(dāng)然添加的runloop不存在也不會(huì)運(yùn)行;
還要指定添加到的runloop的哪個(gè)模式,而且還可以指定添加到runloop的多個(gè)模式,模式不對(duì)也是不會(huì)運(yùn)行的
runloop會(huì)對(duì)timer有強(qiáng)引用,timer會(huì)對(duì)目標(biāo)對(duì)象進(jìn)行強(qiáng)引用(是否隱約的感覺(jué)到坑了。。。)
timer的執(zhí)行時(shí)間并不準(zhǔn)確,系統(tǒng)繁忙的話,還會(huì)被跳過(guò)去
invalidate調(diào)用后,timer停止運(yùn)行后,就一定能從runloop中消除嗎,資源????
呵呵。。。下面會(huì)解決這些問(wèn)題
定時(shí)器的一般用法
控制器中添加定時(shí)器,例如:
- (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"); }
上面的代碼就是我們使用定時(shí)器最常用的方式,可以總結(jié)為2個(gè)步驟:創(chuàng)建,添加到runloop
系統(tǒng)提供了8個(gè)創(chuàng)建方法,6個(gè)類(lèi)創(chuàng)建方法,2個(gè)實(shí)例初始化方法。
有三個(gè)方法直接將timer添加到了
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26