引言
定時(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)引用(是否隱約的感覺到坑了。。。)
timer的執(zhí)行時(shí)間并不準(zhǔn)確,系統(tǒng)繁忙的話,還會(huì)被跳過去
invalidate調(diào)用后,timer停止運(yùn)行后,就一定能從runloop中消除嗎,資源????
呵呵。。。下面會(huì)解決這些問題
定時(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è)類創(chuàng)建方法,2個(gè)實(shí)例初始化方法。
有三個(gè)方法直接將timer添加到了
網(wǎng)友評(píng)論