看视频习得超级内存优化和性能优化技能(runLoop)


看视频习得 视频地址 ; http://study.163.com/course/courseLearn.htm?courseId=1003775038#/learn/video?lessonId=1025653129&courseId=1003775038

看视频习得超级内存优化和性能优化技能(runLoop)_第1张图片

看视频习得超级内存优化和性能优化技能(runLoop)_第2张图片

上图中的 _tasks 是任务数据 用来盛放人物 _maxQueueLength是最大人物数      timer 的作用是可以让 runloop在休息的时候也可以执行任务也就是本例中的从任务数组中取出任务(渲染图片)  如果没有这个 timer 那么当 runloop 休息的时候(不拖拽 tableview 的时候) runloop 不会从任务数组中取出任务也就不会在闲时渲染图片 在 timer 的定时器方法中 我们什么都不操作 这个方法的左右就是让 runloop 不休息 一直在任务数组中取出任务(就是一直从任务数组中取出任务 就是一直渲染未渲染的 imageView)


看视频习得超级内存优化和性能优化技能(runLoop)_第3张图片

上图中的for 循环 是先删除 cell 上的 view 然后在往 cell 上放控件  这样 当 cell 滑动的时候 就会先清除 cell 上的控件 这样可以防止cell 滑动的时候内存一直涨(就是内存优化)

下边的 addTask 就是往数组中添加任务, 因为这个任务是渲染三张图片 而图片又比较大 所以在一个 runloop 周期内同时渲染三张图片属于耗时操作  为了防止主线程卡顿 所以需要在一个runloop 周期内 只渲染一张图片

看视频习得超级内存优化和性能优化技能(runLoop)_第4张图片

上图中代码的作用是保证任务数组中一直最多都只有18个任务

看视频习得超级内存优化和性能优化技能(runLoop)_第5张图片

上图的代码的作用是从任务数据中取出第一个任务并执行 如果任务数组中没有任务 就返回


看视频习得超级内存优化和性能优化技能(runLoop)_第6张图片

看视频习得超级内存优化和性能优化技能(runLoop)_第7张图片

上图代码的作用是在一个runloop 周期内 只渲染一张图片 这样可以防止在一个 runloop 中期内 渲染3张大图使主线程卡顿


你可能感兴趣的:(看视频习得超级内存优化和性能优化技能(runLoop))