定時器學(xué)習(xí)與使用

API介紹


+(NSTimer *)scheduledTimerWithTimeInterval:ti invocation:invocation repeats:yesOrNo;
+(NSTimer *)scheduledTimerWithTimeInterval:ti target:(id)aTarget selector:aSelector userInfo:userInfo repeats:yesOrNo;```
scheduled開頭的兩個方法是比較常用的創(chuàng)建定時器的方法 因為這兩個初始化定時器后直接加入到當(dāng)前運行循環(huán)中 在TimeInterval后 自動啟動 比較方便 
`+(NSTimer *)timerWithTimeInterval:ti invocation:invocation repeats:yesOrNo;`
`+(NSTimer *)timerWithTimeInterval:ti target:aTarget selector:aSelector userInfo:userInfo repeats:yesOrNo;`
這兩個同樣是創(chuàng)建 但沒有加入到runloop中 建立之后 必須手動加入,見例2
關(guān)于為什么會出現(xiàn)比較麻煩這種方式 可能是因為簡單那種方式不能在子線程調(diào)用?
`-(instancetype)initWithFireDate:date interval:ti target:t selector:s userInfo:ui repeats:rep NS_DESIGNATED_INITIALIZER;`
關(guān)于以上幾個生成方法的參數(shù)
1:ti 多久后執(zhí)行 如果是0 系統(tǒng)就0.1毫秒后執(zhí)行 
2:aTarget調(diào)用后面 方法的對象 執(zhí)行后有強指針指向 直到調(diào)用invalidate
3:aSelector你要定時執(zhí)行的方法
4:userInfo 可以捎帶可對象 invalidate前不會被釋放
5:repeats yesOrNo  YES重復(fù)執(zhí)行 NO只執(zhí)行一次

`-(void)fire;`
無視延時直接觸發(fā)
`@property (copy) NSDate *fireDate;`
設(shè)置定時器開始運行的時間
`@property (readonly) NSTimeInterval timeInterval;`
定時器延時時間`typedef double NSTimeInterval`這貨是個double
`@property NSTimeInterval tolerance NS_AVAILABLE(10_9, 7_0);`

`-(void)invalidate;` 
停止接收 并從Runloop中請求刪除 
`@property (readonly, getter=isValid) BOOL valid;`
是否在運行
`@property (nullable, readonly, retain) id userInfo;`
其他信息
`@end`

####一些小示例
***
示例1:直接用scheduled生成
`[NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(scanTimeout:) userInfo:nil repeats:NO];`
示例2:需手動加入RunLoop
`self.timer =[NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(scanError) userInfo:nil repeats:YES];`
`NSRunLoop *runLoop = [NSRunLoop currentRunLoop];`
`[runLoop addTimer:self.timer forMode:NSDefaultRunLoopMode];`

如果是在子線程調(diào)用 需調(diào)用` [runloop run];`

實現(xiàn)定時器停止、運行可使用下面方法:
`[timer setFireDate:[NSDate distantFuture]];//停止`
`[timer setFireDate:[NSDate distantPast]];//運行`
 
 移除定時器invalidate這步是必須的上面參數(shù)有提到 不然不會釋放 
`[timer invalidate];`
`timer = nil;//這里很多地方提到一定置為nil 我沒搞也釋放了 建議還是加上保險`

 [小練習(xí)](https://github.com/julysiji/1547-NStimer)
[一篇比較詳細的介紹](http://www.cnblogs.com/smileEvday/archive/2012/12/21/NSTimer.html)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容