IOS-NSTimer的使用

一,文档翻译

1.Overview简介

NSTimer用于创建定时器,在经过一个确定的时间之后执行,发送特定的消息给目标对象。

定时器必须和一个运行循环(run loops)一起使用,要想有效的使用定时器,必须了解循环执行的操作<NSRunloop待翻译>和<Threading programming Guide待翻译>。特别要指出的是,运行的循环会保留定时器,你可以将定时器释放,在加入到一个运行的循环中之后。

定时器并不是实时机制的,它在它所属的循环模型检测到它的执行时间已经过期时执行。作为一个管理各种输入源的典型运行循环,定时器的有效间隔时间应限制在50-100毫秒之间。如果定时器重现的时间很长,这时如果运行循环处于不能监视定时器的状态,则定时器不会执行。直到运行循环下次检测定时器才执行。因此,定时器执行的真实时间可能比在预设的执行时间要有点延迟。

NSTimer是“toll-free bridged”<“toll-free bridged”待翻译>;

2.循环定时器与非循环定时器

你可以在创建定时器时指定它是循环还是非循环。非循环定时器只执行一次,便自行作废。相反的是循环定时器执行在相同的时间间隔后执行。

循环定时器根据自己的预定执行时间来安排自己,而不是真实时间。例如,如果一个定时器在特定的时间执行,在此之后每五秒执行一次,则预定的执行时间将总是指向原始的5秒间隔,甚至在真实的执行时间已经延后的情况下也是如此。如果定时器的执行时间延迟了一段时间,这个时间内经过了一个或多个以排布的执行时间,这个定时器也只会执行一次。定时器将会重新排定日程,为下一次的执行时间。

3.把定时器列入运行循环中

一个定时器一次只能加入到一个运行循环中,尽管在这个运行循环中它可以加入多种循环模式。

有三种方式创建定时器:

*使用

scheduledTimerWithTimeInterval:invocation:repeats:

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

类方法去创建和排定定时器在当前的运行循环中,用默认的循环模式。

*使用

timerWithTimeInterval:invocation:repeats:

或 timerWithTimeInterval:target:selector:userInfo:repeats:

类方法去创建定时器,但不排定在运行循环中。在创建它之后,你必须使用addTimer:forMode:将它加到相应的运行循环管理器中。

*使用initWithFireDate:interval:target:selector:userInfo:repeats:

分配和初始化一个定时器。在你创建它之后,要用addTimer:forMode:加到相应的运行循环管理器中。

一但定时器排定在运行循环中,定时器将按照固定的时间执行,直到它作废。非循环定时器在执行之后,立即自行作废。循环定时器必须你通过调用他的invalidate方法作废。

一旦作废,定时器将不再可用。

4.子类说明

不要试图创建NSTimer的子类。

二,类函数

+ scheduledTimerWithTimeInterval:invocation:repeats:
+ scheduledTimerWithTimeInterval:(执行的间隔时间:创建后,在经过这么多时间之后第一次执行)target:selector:userInfo:(存放定时器的信息,定时器会将计数加一,在作废时释放)repeats:
+ timerWithTimeInterval:invocation:repeats:
+ timerWithTimeInterval:target:selector:userInfo:repeats:

四个创建定时器的类方法。

三,实例方法

- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

date:定时器在这个时间第一次第一次执行

seconds:执行间隔

- (void)fire

使调用者传递给它的目标函数

你可以使用这个函数去执行一个循环定时器,而不打乱它以排定的执行时间。

但如果使非循环的定时器,调用此函数后,定时器会自动作废,即使他的预定执行时间还没到。

- (NSDate *)fireDate

返回调用者将要执行的时间。如果定时器已经不可用了,则返回最后一次执行的时间。

- (void)invalidate

停止调用者的执行,并将其从运行循环中移出。这是作废并移出定时器从一个NSRunloop中的唯一方法。当NSRunloop对象移除定时器时,定时器将释放目标和user info等对象。

特别提醒:你必须在定时器创建的线程中移除这个定时器。因为每个线程有自己对应的运行循环。

- (BOOL)isValid

查看定时器是否可用。

- (void)setFireDate:(NSDate *)date

使调用的定时器在时间date时执行,如果date是过去的时间,则现在执行。

你通常可用用这个方法去调整一个循环定时器的执行时间。(是调整一次的执行时间,还是循环定时器的以后的执行时间都以这为参照原点?

对于失效的和已经执行的非循环定时器你不能使用这个方法。还有,你要在定时器所添加的线程中使用这个方法。

- (NSTimeInterval)timeInterval

定时器的间隔执行时间,如果是非循环的返回0

- (id)userInfo

返回user info

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值