1. 声明NSTimer
@property (nonatomic, strong) NSTimer *timer;
或
@property (nonatomic, weak) NSTimer *timer;
2. 定义NSTimer
self.timer = [NSTimer timerWithTimeInterval:ti target:aTarget selector:aSelector userInfo:userInfo repeats:yesOrNo];
或
NSTimer *timer = [NSTimer timerWithTimeInterval:ti target:aTarget selector:aSelector userInfo:userInfo repeats:yesOrNo];
self.timer = timer;
3. 启动NSTimer
[NSRunLoop.currentRunLoop addTimer:self.timer forMode:mode];
NSTimer对象添加进NSRunLoop对象时,NSRunLoop对象会一直持有NSTimer对象,直到NSTimer对象被移除。
NSRunLoopMode可选择使用NSDefaultRunLoopMode
或NSRunLoopCommonModes
。
- NSDefaultRunLoopMode
当前线程是主线程时,某些UI事件,比如ScrollView正在拖动,NSRunLoopMode会切换成NSEventTrackingRunLoopMode
,在这个模式下,默认的NSDefaultRunLoopMode
模式中注册的事件是不会执行的。 - NSRunLoopCommonModes
这个模式相当于 NSDefaultRunLoopMode 和 NSEventTrackingRunLoopMode 的结合。
4. 移除NSTimer
[self.timer invalidate];
执行该代码,NSTimer对象从NSRunLoop对象中移除。