NSTimer收录

使用方法:

timeMedia = [NSTimer scheduledTimerWithTimeInterval: 1 / self.video.fps

target:self

selector:@selector(displayNextFrame:)

userInfo:nil

repeats:YES];

销毁方法

[timeMedia invalidate];

继续方法

[timeMedia setFireDate:[NSDate date]];

暂停方法

[timeMedia setFireDate:[NSDate distantFuture]];

加入Runloop

[[NSRunLoop mainRunLoop]addTimer:_time1 forMode:NSRunLoopCommonModes];

关于NSTimer与RunLoop

Timer创建之后,需要将timer加入到mainrunloop当中去,而不是加入到currentrunloop.虽然两者都能实现在timer运行的时候拖动界面或者进行其他的操作不会停止timer,但是currentrunloop会影响到当前控制器的比如代理方法的执行。而mainrunloop不会影响。深层原因得慢慢看资料。

UITableViewCell上有个UILabel,显示NSTimer实现的秒表时间,手指滚动cell过程中,label是否刷新,为什么?

这是否刷新取决于timer加入到Run Loop中的Mode是什么。Mode主要是用来指定事件在运行循环中的优先级的,分为:

NSDefaultRunLoopMode(kCFRunLoopDefaultMode):默认,空闲状态

UITrackingRunLoopMode:ScrollView滑动时会切换到该Mode

UIInitializationRunLoopMode:run loop启动时,会切换到该Mode

NSRunLoopCommonModes(kCFRunLoopCommonModes):

苹果公开提供的Mode有两个:

NSDefaultRunLoopMode(kCFRunLoopDefaultMode)

NSRunLoopCommonModes(kCFRunLoopCommonModes)

在编程中:如果我们把一个NSTimer对象以NSDefaultRunLoopMode添加到主运行循环中的时候, ScrollView滚动过程中会因为Mode的切换,而导致NSTimer将不再被调度。当我们滚动的时候,也希望不调度,那就应该使用默认模式。但是,如果希望在滚动时,定时器也要回调,那就应该使用NSRunLoopCommonModes

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容