runloop实战应用——加载高清大图

在UITableView或UIScrollView加载多张高清大图时,由于一次性渲染导致页面卡顿。通过监听Runloop循环,每次仅渲染一张大图来解决这个问题。文章详细介绍了使用CFRunLoopRef监听Runloop,将加载任务放入数组,并在Runloop中逐个执行的实现步骤,以及推荐了一个第三方库RunLoopWorkDistribution来简化这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在用tableVIew或者scrollView加载多张高清大图的时候,页面会卡顿。如下图
这里写图片描述
这里写图片描述

原因

runloop在一次渲染中,需要渲染十几张高清大图,所以卡主了

解决思路

每次Runloop循环,只渲染一张大图!!

1.监听Runloop的循环!!
2.将加载大图的代码!放在一个数组里面!!
3.每次Runloop循环,取出一个加载大图的任务执行!!

解决步骤

需要用到C语言的框架CFRunLoopRef。
FRunLoopRef 是在 CoreFoundation 框架内的,它提供了纯 C 函数的 API,所有这些 API 都是线程安全的。

NSRunLoop 是基于 CFRunLoopRef 的封装,提供了面向对象的 API,但是这些 API 不是线程安全的。

CFRunLoopRef 的代码是开源的,你可以在这里 http://opensource.apple.com/tarballs/CF/CF-855.17.tar.gz 下载到整个 CoreFoundation 的源码。

1.监听Runloop的循环

在CFRunloop中可以看到

/* Run Loop Observer Activities */
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
    kCFRunLoopEntry 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值