利用NSOperation进行异步图片下载——设置UITabView数据,图片下载,占位图。解决异步下载和Cell重用造成的图片设置混乱。和多次重复下载的问题

 同步下载图片:同步下载图片。就是直接下载,然后设置。因为下载是一个耗时操作,同步执行又限制当前操作执行不完就不允许执行下一个操作。从而造成界面卡顿的现象。如下图所示:


为了解决这个问题:需要使用异步下载:即当前操作不执行完毕可以执行下一个操作。如下图所示:


占位图:UITabViewCell中UIImageView是懒加载的方式执行的,如果没有图片是默认不显示的。所以一加载完毕是没有图片显示的图片的frame为0 。点击Cell会触发Cell的layoutSubView操作,才会给Cell重新布局。layoutSubView是UIView的方法,根据组件的大小进行设置,如果是图片则根据图片的实际大小进行布局。这时在图片下载完成之前就要使用占位图。


异步下载:异步下载图片不可以直接给Cell设置图片,因为Cell是重用的,重用后会重新赋值造成图片数据混乱。最好的解决方法是利用MVC为Model设置下载后的数据进行保存。也就是说给Cell赋值不可以跳过Model直接赋值。






利用MVC解决方案如下:


利用MVC通过Model为Cell设置数据,避免了直接为Cell赋值由于Cell的重用造成的数据混乱的问题。

另外加了一个判断,如果Model有数据直接为Cell赋值,没有数据的情况下才进行异步任务下载图片,下载完成后刷新当前Cell。从而解决了重用多次重复下载的问题。

特别注意:刷新Cell,意味着重新初始化Cell。重新从头开始运行,再执行一次判断,Model是否有图片数据,如果有的话就直接设置。

新建工程,操作步骤如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值