首页 / 历史 / 现代史 / 正文

cctouchesbegan(浅析RunLoop原理及其应用)

放大字体  缩小字体 来源:金融危机影响 2026-04-17 17:25  浏览次数:9
浅析RunLoop原理及其应用nerror="javascript:errorimg.call(this);">

转载本文需注明出处:微信公众号EAWorld,违者必究。

引言:

1、RunLoop的概念

3、RunLoop的常用模式

RunLoop在TableView中的应用(解决滑动卡顿问题)。

浅析RunLoop原理及其应用nerror="javascript:errorimg.call(this);">

如图代码展示,当加载高清大图渲染屏幕,而此时不得不在主线程操作,会引起滑动的卡顿。

tableview 在加载 cell 时如果遇到多个耗时操作会有点卡顿。将耗时操作放到 DefaultMode 里只能解决滑动时流畅,但是停止时需要加载耗时,仍然会有卡顿的感觉。正确方法是采用 RunLoop 监听,将多个耗时操作分开执行,在每次 RunLoop 唤醒时去做一个耗时任务。

浅析RunLoop原理及其应用nerror="javascript:errorimg.call(this);">

阻塞原因:kCFRunLoopDefaultMode时候 多张图片(特别是高清大图)一起加载(耗时)loop不结束无法BeforeWaiting(即将进入休眠) 切换至UITrackingRunLoopMode来处理等候的UI刷新事件造成阻塞。

解决办法:每次RunLoop循环只加载一张图片 这样loop就会很快进入到BeforeWaiting处理后面的UI刷新(UITrackingRunLoopMode 优先处理)或者没有UI刷新事件继续处理下一张图片。

浅析RunLoop原理及其应用nerror="javascript:errorimg.call(this);">

浅析RunLoop原理及其应用nerror="javascript:errorimg.call(this);">


RunLoop 监听添加Observer (监听RunLoop的beforeWaiting)当处理完一张图片即将进入到beforeWaiting时处理数组里的tasks,这些任务就在callback里面做处理。

callBack拿到task处理了一部分就进入到了休眠 比如拿到18个任务只处理了7个就不处理了。

此处添加Timer是让RunLoop一直处于活跃状态 保证即使处理完所有task还是一直活跃状态。

浅析RunLoop原理及其应用nerror="javascript:errorimg.call(this);">


关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。

打赏
0相关评论
热门搜索排行
精彩图片
友情链接
声明:本站信息均由用户注册后自行发布,本站不承担任何法律责任。如有侵权请告知立立即做删除处理。
违法不良信息举报邮箱:115904045
头条快讯网 版权所有
中国互联网举报中心