NSTimer 是一個常用的物件,用來處理定期持續執行的事情。比方說倒數計時器。

NSTimer 使用上要特別注意它的生命周期 以免還沒執行,Timer 就消失了,或 ViewController 都 Dismiss 了,它還在計它的數。

 
 

首先,我們通常會建立三個東西來完成 NSTimer 的工作

 

1. 宣告全域變數
2. 建立相對應的 method
3. 建立 Timer 

宣告全域變的的目的,是為了在建立Timer 後,不因 method 執行結束後消失這個變數。
範例如下:

首先,依 Hello World 的文件做法,建立一個簡單程式,有一個 UILabel 和 Button,也完成了IBAction 與 IBOutlet 的建立,接下來就是主程式

螢幕快照 2012-11-19 下午4.07.10  
 

我們在第 12 行建立了一個全域的 NSTimer 叫 timer,

接下來在 IBAction 中(22行起)設定,如果 counter isValid (正在執行中),就使用 invalidate 這個 method 中斷它,

否則就用 

scheduledTimerWithTimeInterval:target:selfselector:userInfo:repeats:

方法來建立 NSTimer
首先第一個參數是多久執行一次,案例中是 0.1 秒,再來是目標,就是傳送訊息的對像,本案中是 self,再來是selector,也就是要執行的 method 名稱, 案例中為 @selector(addNumber:) ,最後是使用資訊與是否重覆執行,如果重覆執行,就會不停的執行,直到被 invalidate 為止。

另外要特別注意的是,NSTimer 如果你開了 repeats, ARC 就不會主動放掉記憶體,所以在離開一個 view Controller 之前,一定要手動 invalidate 所有的 NSTimer,不然來回幾次就會吃光你的記憶體了。 

 

 

創作者介紹
創作者 shenfive 的頭像
shenfive

丹尼老師的 Objective-C/Swift for iOS 教學網站

shenfive 發表在 痞客邦 留言(2) 人氣()