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];



你可能感兴趣的:(Runloop(运行循环 —自动释放池丶滚动视图丶(NSTimer))