热门搜索 :
考研考公
您的当前位置:首页正文

Runloop的理解和应用场景

来源:东饰资讯网

一直没有时间去总结一下关于runloop的知识点,好吧,主要是因为太懒以及严重的拖延症,如果你有治疗拖延症的秘方,请给我在下面留言,哈哈。话不多说,开始今天的主题

先说说runloop的作用

1.保证程序持续运行,就是让程序一直保持活跃状态不会退出

2.处理App中的各种事件,如视图滚动,触摸,拖拽,定时器等等

3.节省CPU资源,提高程序的性能(这个后面会说到)

如何获取runloop

//OC获取

1. NSRunLoop *runloop = [NSRunLoop currentRunLoop];

//C语言获取

2.CFRunLoopRef runRef = CFRunLoopGetCurrent();

Runloop的应用

1.定时器和视图滚动

我想这个大部分人都遇到过,我们常常会用到首页的轮播图,它包含了定时器和scrollView,一般情况下他们都处于默认模式下,如果同时开启定时器和滚动视图,定时器就会停止,这是因为当前的runloop模式已经切换到UITrackingRunLoopMode了,如果要解决它,我们可以获取当前的runloop,将定时器添加进去,并把模式设置为NSRunLoopCommonModes,就能解决这个问题,上代码:

           //NSTimer 调用了scheduledTimer方法,那么会自动添加到当前的runloop里面去,而且runloop的运行模式kCFRunLoopDefaultMode,切换模式后定时器就不工作了

          NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self   selector:@selector(run) userInfo:nil repeats:YES];

        //更改模式

         [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

2.保证子线程一直存活

3.TableView的卡顿问题

TableView卡顿环境分析:

而渲染图形的UI操作必须在主线程中,不能开辟线程进行图形处理。

在拖动tableView的时候,Runloop要处理拖动事件,还要处理过多图片渲染,而造成卡顿。

解决卡顿分析:

1、Runloop在一次循环渲染图片过多,那就让Runloop一次处理一张图片

2、将处理图片的代码放在block中,然后加入数组中,处理几次加入几次。

3、我们只需要渲染,tableView显示的图片,显示图片有最大个数。移开屏幕或者不处理的从队列数组里删去。

下面是domo地址:

Top