NSTimer用法总结

本文探讨了NSTimer在iOS开发中的应用技巧与注意事项,包括不同类型的定时器初始化、触发及停止方法,并强调了如何避免程序崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用NSTimer比较多,在使用的过程中发现了一些问题。比如说在一个页面中使用了一个不重复执行的NSTimer,但是我在页面消失的时候调用timer的invalidate方法来试图将其销毁掉,但是程序就奔溃了,提示没有找到方法。再比如我在一个面中定义了多个NSTimer,在页面消失的时候没有将其invalidate掉,这样程序就时而奔溃时而不奔溃的。。。
下面总结一下NSTimer的使用方法:
[不能向不重复执行的NSTimer和已经废除掉的NSTimer发送invalidate消息。不需要保存不重复执行的NSTimer的一个引用,直接用scheduledTimerWithInterval....方法]
[重复执行的NSTimer,在不用的时候要手动将其invalide掉。需要保存一个引用,因为在程序中不用到它的时候要将其废除掉。]

1、初始化

1. + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

2. + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

3. alloc init方法。

注:不用scheduled方式初始化的,需要手动addTimer:forMode: 将timer添加到一个runloop中。

  而scheduled的初始化方法将以默认mode直接添加到当前的runloop中.

2、触发

当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。

可以使用-(void)fire;方法来立即触发该定时器;

注:You can use this method to fire a repeating timer without interrupting its regular firing schedule. If the timer is non-repeating, it is automatically invalidated after firing, even if its scheduled fire date has not arrived.

注:在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;

在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。

 

3、停止

- (void)invalidate;

这个是唯一一个可以将计时器从runloop中移出的方法。

注:

NSTimer可以精确到50-100毫秒.

NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个点,那么下一个点就pass过去了.


参考:http://www.onmoso.com/ios/464.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值