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,不然来回几次就会吃光你的记忆体了。 

 

 

相关文章