对于在Assests.xcassets
委托方法tableView
进行单元配置期间使用默认存储在_cellForRowAtIndexPath_
中的UIImage,我有一个疑问。考虑以下代码片段:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:newItemCellResueId , for: indexPath) as? MyCustomCell
cell?.imageView?.image = defaultImage
//After this we do all other stuff that needs to be done with the cell
return cell
}
其中defaultImage是我的类的存储属性,其初始化如下:-
var defaultImage = UIImage(named: "Default")
现在我的问题是这个。由于 image 是单元格的 imageView 的子视图,因此当我将单元格的imageView.image设置为等于存储属性的实例时,我假定它将作为该单元格的imageView的子视图。如果是这样,那么如何将单个默认UIImage实例作为子视图添加到多个单元格?如果不是,是否生成此UIImage的其他实例并将其添加到单元格?如果是,为什么不担心所有defaultImage实例的内存占用(缓存等)(就像我们为TableViewControllers的异步获取图像所做的那样)
答案 0 :(得分:2)
由于图像是单元格imageView的子视图
不,不是。 image
只是图像类型UIImageView
的{{1}}的属性,显示在图像视图(docs)中。
现在,如果您具有默认的单元格图片,则不必担心“内存占用”,可以在UIImage?
内进行设置
cellForRowAt
答案 1 :(得分:2)
UIImage
不是UIView
的子类,并且不会添加为UIImageView
的子视图。 UIImageView
是可以呈现UIView
的{{1}}。
由于UIImage
是不可变的对象,因此多个UIImage
可以安全地引用相同的UIImageViews
。
UIImage
初始化程序使用内部内存缓存,因此,无论是对默认图像使用单个属性还是重复使用UIImage(named:)
初始化程序,都不会影响应用程序的内存占用量。
答案 2 :(得分:0)
尝试一下。
从Assets.xcassets添加新的图像集。并将其命名为“测试”
它将打印带有5张时间图像的表格视图。
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate=self
tableView.dataSource=self
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier:"cell") as UITableViewCell!
cell.imageView?.image=UIImage(named:"test")
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
}