Runtimer Runloop的算法

2018-04-27  本文已影响0人  你美依旧

1   RunLoop 

Runloop 是一个循环机制 能保证程序在运行的时候不会退出 当没有事件的时候就会进入睡眠状态当有事件的时候就会唤醒 处理当前事件 当事件处理完成后 又进入睡眠状态

Runloop的运行模式

iOS 系统中提供了五种运行模式

1  NSDefaultRunLoopMode

默认状态(空闲状态),比如点击按钮都是这个状态

2 UITrackingRunLoopMode

滑动时的Mode。比如滑动UIScrollView时。

3 UIInitializationRunLoopMode

私有的,APP启动时。就是从iphone桌面点击APP的图标进入APP到第一个界面展示之前,在第一个界面显示出来后,UIInitializationRunLoopMode就被切换成了NSDefaultRunLoopMode。

4 NSRunLoopCommonModes

它是NSDefaultRunLoopMode和UITrackingRunLoopMode的集合。结构类似于一个数组。在这个mode下执行其实就是两个mode都能执行而已。

典型的应用场景这样:当前界面有开启一个NSTimer,并且滑动UIScrollView。正常开启NSTimer后,滑动UIScrollView时它是不滑动的。解决办法就是把这个timer加入到当前的RunLoop,并把RunLoop的mode设置为NSRunLoopCommonModes。这样就可以保证不管你是NSDefaultRunLoopMode里跑,还是UITrackingRunLoopMode里跑,这个timer都可以执行。

二 每个runloop中监听着三类事件

Source                         timer                 observe

三 使用runloop实现当tableview加载大量的高清图片时候卡顿

引起卡顿的原因:runloop每次循环都会Source事件中的图片渲染事件,当大量图片需要渲染的时候 主线程相当于一个耗时操作  当拖动时runloop正在处理渲染事件 不能处理拖动事件故出现界面卡顿的现象。

解决思路:1  大量图片不应该缓存下来不然会引起内存的爆满,而引起内存警告 或者崩溃

                   2 图片应该分批渲染 减小runloop的循环时间 


上一篇 下一篇

猜你喜欢

热点阅读