在开发过程中,我们往往会需要在某个时间后执行方法,或者周期性的执行某方法,这时就要用到定时器来实现,OC中定时器有多种,下面是对NSTimer的小小总结
一、创建定时器
1.第一种
[NSTimer timerWithTimeInterval:(NSTimeInterval) target:(nonnull id) selector:(nonnull SEL) userInfo:(nullable id) repeats:(BOOL)];
参数说明:
TimeInterval:定时时间,单位是秒
target:监听对象,一般为 self
selector:定时器执行的方法
userInfo:一些标识信息,一般传入 nil
repeats:是否重复执行,YES/NO
注意:此方法创建的定时器不能自动运行,需要手动将其添加到RunLoop中
//创建一个定时器 每隔1s 执行 nextOne 方法
//创建定时器
NSTimer *timer = [NSTimer timeWithTimeInterval:1.0 target:self selector:@selector(nextOne) userInfo:nil repeats:YES];
//加入RunLoop
[[NSRunLoop currentRunLoop] addTimer:self.timer forModes:NSRunLoopCommonModes];
2.第二种
[NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval) target:(nonnull id) selector:(nonnull SEL) userInfo:(nullable id) repeats:(BOOL)]
参数说明:
TimeInterval:定时时间,单位是秒
target:监听对象,一般为 self
selector:定时器执行的方法
userInfo:一些标识信息,一般传入 nil
repeats:是否重复执行,YES/NO
注意:此方法创建的定时器会自动加入到RunLoop,即自动运行
//创建一个定时器 每隔1s 执行 nextOne 方法
//创建定时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(nextOne) userInfo:nil repeats:YES];
二、释放定时器
[self.timer invalidate];
//定时器在释放后,将不会再次恢复,因此在是否定时器后最好进行如下
self.timer = nil;
三、NSTimer的一些属性
//设置定时器的具体启动时间 一般用来管理定时器的启动停止
@property (copy) NSDate *fireDate;
//启动定时器
[self.timer setFireDate[NSDate distancePast]];
//停止定时器
[self.timer setFireDate[NSDate distantFuture]];
//[NSDate distancePast]:返回一个随机遥远的过去时间
//[NSDate distanceFuture]:返回一个随机遥远的将来时间
//获取定时器的延时时间
@property (readonly) NSTimeInterval timeInterval;
//是否在运行
@property (readonly, getter=isValid) BOOL valid;
//一些标识信息
@rpoperty (nullable, readonly, retain) id userInfo;