一钙姊、NSTimer
OC中的計(jì)時(shí)器(時(shí)鐘),可每隔一段時(shí)間執(zhí)行一次。
1.初始化
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
(NSTimeInterval)ti : 時(shí)間間隔边灭,每隔多少秒執(zhí)行一次
target:(id)aTarget : 任務(wù)執(zhí)行對(duì)象,即任務(wù)交給誰來執(zhí)行
selector:(SEL)aSelector : 方法選擇器健盒,任務(wù)執(zhí)行的方法或事件
userInfo:(id)userInfo : 可以為nil绒瘦,當(dāng)定時(shí)器失效時(shí),由你指定的對(duì)象保留和釋放該定時(shí)器扣癣。
repeats:(BOOL)yesOrNo : 當(dāng)YES時(shí)惰帽,定時(shí)器會(huì)不斷循環(huán)直至失效或被釋放,當(dāng)NO時(shí)父虑,定時(shí)器會(huì)循環(huán)發(fā)送一次就失效该酗。
使用上面第一個(gè)類方法創(chuàng)建的定時(shí)器,需要手動(dòng)將定時(shí)器添加到runLoop中士嚎,使用上面第二個(gè)類方法創(chuàng)建的定時(shí)器呜魄,系統(tǒng)會(huì)自動(dòng)將其添加到 runLoop 中。
NSTimer * timer1 = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeFired:) userInfo:nil repeats:YES];
NSTimer * timer2 = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timeFired:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer2 forMode:NSDefaultRunLoopMode];
2.啟動(dòng)
當(dāng)NSTimer創(chuàng)建完后莱衩,在經(jīng)過初始化時(shí)指定的timeInterval秒后自動(dòng)觸發(fā)爵嗅。
3.立即觸發(fā)
使用-(void)fire;方法來立即觸發(fā)該定時(shí)器
若在重復(fù)執(zhí)行的定時(shí)器中調(diào)用此方法后立即觸發(fā)該定時(shí)器,且不會(huì)中斷之前的執(zhí)行計(jì)劃笨蚁;
若在不重復(fù)執(zhí)行的定時(shí)器中調(diào)用此方法睹晒,立即觸發(fā)后,就會(huì)使這個(gè)定時(shí)器失效括细。
[timer fire];
4.暫停
給定時(shí)器設(shè)置一個(gè)未來無法到達(dá)的時(shí)間點(diǎn) distantFuture伪很,定時(shí)器就會(huì)一直等待不再觸發(fā)了,也就是暫停了奋单。
-(void)pauseTimer{
[timer setFireDate:[NSDate distantFuture]];
}
5.恢復(fù)(繼續(xù))
把定時(shí)器觸發(fā)時(shí)間設(shè)置為當(dāng)前時(shí)刻锉试,定時(shí)器就繼續(xù)執(zhí)行了。
-(void)resumeTimer{
[timer setFireDate:[NSDate date]];
}
6.停止
使用- (void)invalidate;方法來將定時(shí)器從runloop中移出辱匿,從而定時(shí)器停止键痛。
[timer invalidate];
二炫彩、CADisplayLink
CADisplayLink默認(rèn)重復(fù)執(zhí)行,每秒運(yùn)行60次絮短,frameInterval值為1江兢,通過它的frameInterval屬性改變每秒運(yùn)行幀數(shù),如設(shè)置為2丁频,意味著CADisplayLink每隔一幀運(yùn)行一次杉允,有效的邏輯每秒運(yùn)行30次。一般用于逐幀動(dòng)畫中席里。
1.初始化
+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;
2.啟動(dòng)
初始化后叔磷,要將其添加到 runLoop 中才能執(zhí)行。
- (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode //添加到runLoop
- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode //從runLoop中移除
例
CADisplayLink * link = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeFired:)];
[link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
3.暫停和繼續(xù)
設(shè)置 paused 屬性值為YES奖磁,則暫停執(zhí)行改基;設(shè)置 paused 屬性值為NO,則繼續(xù)執(zhí)行咖为。
[link setPaused:YES];
[link setPaused:NO];
4.停止(失效)
使用- (void)invalidate;方法秕狰,將其從runLoop中移除,并釋放其引用的目標(biāo)對(duì)象躁染。
[link invalidate];
link = nil;