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的循环时间
网友评论