NSTimer小结

一.说明

可以精确到50-100毫秒,和CFRunLoopRef是"toll-free bridged",可以重复间隔或不可重复.NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个点,那么下一个点就pass过去了.

二.方法

1.创建

没有scheduled的话需要手动addTimer:forMode:添加timer到一个ruloop中,scheduled的以默认mode直接添加到当前的runloop中.

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

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

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

#if MAC_OS_X_VERSION_10_2 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_2_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED

- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(id)ui repeats:(BOOL)rep;

#endif

2.开始

- (void)fire;

//立即运行timer对应的方法,如果timer不重复,那么timer之后会失效;如果timer重复,timer的开始时间会从这里开始计算,以后就算再次手动调用fire,也不会改变这个时间

- (NSDate *)fireDate;

//下一次运行时间,若已经失效,返回上次运行时间(?为什么我的返回的是2001-1-1?)

#if MAC_OS_X_VERSION_10_2 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_2_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED

- (void)setFireDate:(NSDate *)date;

//设置timer下一次运行的时间,如果date比现在早,那么立刻运行

#endif

- (NSTimeInterval)timeInterval;

//不重复的timer始终返回0

- (void)invalidate;

//唯一的从NSRunLoop中移除释放timer的方法,只能是拥有timer的线程中跳用该函数,否则可能不起作用

- (BOOL)isValid;

- (id)userInfo;

//当tmer失效时不可调用

转载于:https://www.cnblogs.com/v2m_/archive/2011/09/06/2168765.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值