-使用攻略
//初始化(参照上边初始化方法)
NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerClick:) userInfo:nil repeats:YES];
// 启动定时器
[timer setFireDate:[NSDate distantPast]];
//停止定时器
[timer setFireDate: [NSDate distantFuture]];
//释放
-(void)dealloc{
if(timer != nil){
[timer invalidate];
}
}
-主要初始化方法
// 创建一个定时器,但是没有有添加到运行循环,我们需要在创建定时器后手动的调用 NSRunLoop 对象的 addTimer:forMode: 方法。
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
// 创建一个timer并把它指定到一个默认的runloop模式中,并且在 TimeInterval时间后 启动定时器
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
// 创建一个定时器,但是么有添加到运行循环,我们需要在创建定时器后手动的调用 NSRunLoop 对象的 addTimer:forMode: 方法。
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
// 创建一个timer并把它指定到一个默认的runloop模式中,并且在 TimeInterval时间后 启动定时器
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
// 默认的初始化方法,(创建定时器后,手动添加到 运行循环,并且手动触发才会启动定时器)
- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep NS_DESIGNATED_INITIALIZER;
-主要属性
//管理定时器的启动与停止
@property (copy) NSDate *fireDate;
//管理定时器间隔时间
@property (readonly) NSTimeInterval timeInterval;
// 设置误差范围(7.0新增)
@property NSTimeInterval tolerance NS_AVAILABLE(10_9, 7_0);
//设置定时器是否有效
@property (readonly, getter=isValid) BOOL valid;
//传递参数
@property (nullable, readonly, retain) id userInfo;
-注意事项
1.NSTimer在使用时添加倒runloop中导致不能释放
__weak typeof(self) weakSelf = self;
timer = [NSTimer scheduledTimerWithTimeInterval:0.04 target:weakSelf selector:@selector(timerClicked:) userInfo:nil repeats:YES];
2.在视图滚动的时候导致定时事件停止
[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];