简单学习优化一下tableview的方法

普通方法加载img:

let url = URL(string: data.img)
        do {
            let data = try Data(contentsOf: url!)
            let image = UIImage(data: data)
            self.img.image = image
        }catch let error as NSError {
            print(error)
        }

使用后

if let url = URL(string: data.img) {
            self.img.kf.setImage(with: url)
        }

= =看了网上一些关于tableview的优化方案,我这举例用的小demo的cellforrow和heightforrow都挺简单没啥优化的,如果这两个方法的计算很多的话会影响tableview的滑动,因为tablevew划出去的cell会被保存到cell池当中复用,当下一个cell划出来的时候从cell池中去取,所以每次划出都会加载这两个方法,使用频率非常的高,所以尽量少写一点。

引用一下别人文章的方法:

在初学的时候,我们经常会在这个 -tableView:cellForRowAtIndexPath: 数据源方法中绑定模型数据,这个方法调用的次数非常频繁,我们需要尽可能快的返回 UITableViewCell 实例。所以,我们尽量不在这个方法中绑定 cell 的模型数据,而在 -tableView:willDisplayCell:forRowAtIndexPath 代理方法中来绑定数据,这个方法会在 cell 显示之前调用。

1.优化cellForRowAtIndexPath

错误示范:将cell的数据更新放进去,每次都要执行这个操作,麻烦。

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableview.dequeueReusableCell(withIdentifier: NewsTableViewCellID) as! NewsTableViewCell
        cell.updateUI(data:HomeDatas[indexPath.row])
        return cell
    }

解决:将update放到willDisplay cell方法中(注意:在执行这个方法的时候cell已经被创建了,不可以随意更改,只能够更改cell当中的一些label,img等等信息而已)

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        let minecell = cell as! NewsTableViewCell
        minecell.updateUI(data: HomeDatas[indexPath.row])

    }

2.优化heightforrow

错误:

对于定高:

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }

完全没必要用这个方法,直接在tableview里面设置rowheight就好了

tableview.rowHeight = 100

变高:T.T研究一下下次再写

3.就是将图片异步缓存起来,不用每次划每次重新加载,kingfisher这个库就是实现了这个功能,适用于swift。

使用直接设置的方法,Kingfisher首先会尝试从缓存中去取,如果没有,则直接下载图片并且缓存下来以备后用。此外,Kingfisher默认使用absoluteString of url(即绝对url)作为cacheKey以方便再次加载该图片的时候去缓存中根据cacheKey(也就是图片url)查找,通俗来说就是把图片的整个链接作为cacheKey来缓存在本地。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值