定时器的使用

来源:互联网 发布:rekordbox软件的作用 编辑:程序博客网 时间:2024/06/14 02:39

定时器的使用

标签(空格分隔): 知识补充


  • OC中定时器主要有2种:NSTimer,CADisplayLink
// 屏幕1秒刷新60次,每一次屏幕刷新的时候就会调用,1秒调用60次// 创建一个定时器,target对象会调用sel方法+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel; // 把定时器加入进程(一般是加入主进程)   - (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSString *)mode;// 移除定时器方法- (void)invalidate;

NSTimer

// 使用此方法创建NSTimer对象会自动加入到runloop中+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;// 使用此方法创建NSTimer对象需要手动添加到runloop中+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;- (void)fire;  //立即触发定时器- (NSDate *)fireDate;//开始时间- (void)setFireDate:(NSDate *)date;//设置fireData,暂停、开始会用到- (NSTimeInterval)timeInterval;//延迟时间- (void)invalidate;//停止并删除- (BOOL)isValid;//判断是否有效- (id)userInfo;//通常用nil

延迟执行

  • 利用线程的阻塞(睡眠)
[NSThread sleepForTimeInterval:0.01];[NSThread sleepUntilDate:2.0];
  • 调用NSObject的方法
[self performSelector:@selector(run) withObject:nil afterDelay:2.0];// 2秒后再调用self的run方法,内部实现就是NSTimer
  • 使用GCD函数
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{// 2秒后执行这里的代码...});
  • 使用NSTimer
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:NO];
0 0
原创粉丝点击