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
来缓存在本地。
原文地址:https://blog.csdn.net/qq_55655826/article/details/123569742
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_25324.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!