NSTimer创建
方法一
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0f
target:self
selector:@selector(doSomeThing)
userInfo:nil repeats:YES];
// 添加到RunLoop
[[NSRunLoop currentRunLoop] addTimer:timer
forMode:NSRunLoopCommonModes];
这里要将timer添加到RunLoop,选择NSRunLoopCommonModes。如选择NSDefaultRunLoopMode,当页面滑动时,Mode变为NSEventTrackingRunLoopMode,计时器会暂停。
//第二种
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(doSomeThing)
userInfo:nil
repeats:YES];
第二种方式是默认使用 NSDefaultRunLoopMode。
注:RunLoopMode
NSDefaultRunLoopMode:默认的运行模式,用于大部分操作,除了NSConnection对象事件。
NSConnectionReplyMode:用来监控NSConnection对象的回复的,很少能够用到。
NSModalPanelRunLoopMode:用于标明和Mode Panel相关的事件。
NSEventTrackingRunLoopMode:用于跟踪触摸事件触发的模式(例如UIScrollView上下滚动)。
NSRunLoopCommonModes:是一个模式集合,当绑定一个事件源到这个模式集合的时候就相当于绑定到了集合内的每一个模式。
NSTimer的启动与暂停
// 立即启动
[timer fire];
// 开始
[timer setFireDate:[NSDate distantPast]];
// 停止
[timer setFireDate:[NSDate distantFuture]];
如果不设置FireDate,则经过时间间隔后开始。
NSTimer销毁
NSTimer使用后必须销毁。
- (void)dealloc {
[self.timer invalidate];
self.timer = nil;
}