Runloop(运行循环 —自动释放池丶滚动视图丶(NSTimer)

1. runloop是什么?


a.  Runloop是事件接收和分发机制的一个实现。


b.  一个runloop就是一个事件处理循环,用来不停的调配工作以及处理输入事件。


c.  runloops是线程的基础架构部分。使用run loop的目的是使你的线程在有工作的时候工作,没有的时候休眠。


d.  在任何情况,Runloop都不需要手动创建(alloc),如果需要获取当前线程中的runloop,只需要currentRunLoop即可。


e.  在主线程中,系统默认创建并且启动主线程runloop。

     但是在分线程中,系统不会默认启动runloop,需要手动启动。


f.  主线程中的runloop,默认mode是default


简单来说:Runloop是事件循环处理机制。有事情的时候就去做,没事就休眠。



2. runloop的mode有什么用?


  a.   主线程runloop默认是default,runloop还有NSRunLoopCommonModes,UITrackingRunLoopMode等模式。

    NSRunLoopCommonModes:一组配置模式。

    UITrackingRunLoopMode: 滚动视图滚动的模式。


  b.  情况1:当tableView\CollectionView\ScrollView滑动的时候为什么NSTimer停止?

原因:当滚动视图滚动的时候,当前runloop处于UITrackingRunLoopMode。一个runloop不能同时共存在于2个模式。当前runloop处理滚动视图的事件。

修改timer在runloop中的模式与滚动视图在runloop中的模式一致为:UITrackingRunLoopMode。

代码:

[[NSRunLoopcurrentRunLoop] addTimer: timer forMode:UITrackingRunLoopMode];

3. 如果NSTimer在分线程中创建应该注意


a.   子线程中runloop不会启动

[NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(update)userInfo:nilrepeats:YES];

需要启动分线程中的runloop

[[NSRunLoopcurrentRunLoop]run];



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容