Ipad1老设备滑动卡顿解决方案

随着所做应用的快速迭代,页面内容增多的问题:

卡顿的现象发生在每行cell 刷新图片和文字的时候,如果快速滑动,每行cell同步刷新就会发生卡顿现象,再ipad1 ipad2上现象十分明显

造成卡顿来自于.主线程同步刷新,瞬间处理图片CPU占用率超过100% 或者主线程阻塞

主要原因:每行cell新生成的UI渲染(如果是重用,则是imageview的image替换渲染);

如何解决这个问题哪?

答曰:异步线程处理;很对, 不过作为开发的遇到一个疯狂滑动table的测试,你瞬间就奔溃了。


原因是:异步现在你处理又两种方法: 第一种是用GCD方法 在异步主线程里边添加BLock线程处理事件,

  第二种是用线程队列,快速的滑动,线程数的暴增,会堆满线程堆栈,造成溢出引起比如访问释放过后的字符串啊 崩溃。


在ipad设备上当real memory 超过120M 你的程序必挂。内存在内存限制特别明显的ipad1上tableview一般使用重用来节省内存,

重用的时候会出现,一个imageview中image频繁替换,因为这个imageview所在的cell被快速滑动,连续重用了多次,对它处理的异步线程也有多个,

在苹果系统中,用GCD你无法管理线程,因此你这一个异步处理线程都会处理掉,

用线程队列,也依然管理不了,除非你自己建个数组来管理线程队列任务的添加,但伴随的是 性能的限制,你这个数组多大,什么事件取数组中的任务执行,如果

我慢速滑动一个CEll呢 ,这个做出来可能就比较复杂了。

原来我再我的潜意识中 渲染label应该占有很少CPU,不带考虑它的因素,后来经过测试悲剧,就卡在刷新文字上了,才重视起来。

处理方法:

1.

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

中imageview.image=nil;设置为默认状态,(底图已经有一个logo图,因为这时候cell其实还没有渲染的,如果你将imageview.image设置成一张默认图,那么就会多用一些CPU来渲染,)如果cell中的每个item有文字,那把文字更新下 

2.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

中创建一个新的THread来刷新图片,这种线程最适合于重用的时候,它不会阻塞主线程,能根据CPU的占用量来决定什么事件执行此任务,这个线程你也不能管理,但是用它的关键是它的执行时机比较好。tableview分页显示,快速滑动的时候,imageview的image频繁刷新 想解决这个问题,那么就需要在cell里做一些处理,原则是多余的线程让它执行但不渲染,你就不会卡了。 

有什么问题可以留言交流 ,简单写了下,其实这个问题还真是个琢磨的问题,你能学到如何用线程,用GCD 还是NSoperation 还是thread ,还有就是线程阻塞加锁,渲染时机,内存优化等




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值