CFRunloopObserverRef实战开发

1.应用场景:一个tableview的cell中有三张本地高清大图(图片大小1920*1080),滑动tableview时如果直接加载这几张大图,会出现严重的卡顿现象。如何解决这种卡顿现象,我只从runloop的角度去考虑,至于缓存暂时不去考虑。

2.首先我们创建一个普通的tableview显示三张大图,这里就不写代码了,当滑动时巨卡,10fps。

卡顿的原因:当从文件中加载大图,imageio和图片的解码都会消耗时间,如果每一次runloop循环都要处理大量的图片io和解码,runloop会执行不过来,我们可以让runloop一次只处理一张图片的操作。

3.添加一个CFRunLoopObserverRef

CFRunloopObserverRef实战开发_第1张图片

4.runloop是一个循环,怎么让runloop不停的接受事件了?我们可以采用一个定时器,运行空的方法体。

_timer = [NSTimer scheduledTimerWithTimeInterval:0.1 repeats:YES block:^(NSTimer * _Nonnull timer) {

}];

5.怎么把让cell中的图片放入CFRunLoopObserverRef的callback参数(函数指针)中去执行?我们可以把cell添加图片的代码,写成一个block,把block放入一个数组容器中。

CFRunloopObserverRef实战开发_第2张图片

你可能感兴趣的:(CFRunloopObserverRef实战开发)