我对在 tableView
委托(delegate)方法 _cellForRowAtIndexPath_
中的单元格配置期间使用存储在 Assests.xcassets
中的默认 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 的 subview ,当我将单元格的 imageView.image 设置为等于我存储的属性的实例时,我假设它将添加为该单元格的 imageView 的 subview 。如果是这样,如何将单个默认 UIImage 实例作为 subview 添加到多个单元格?如果不是,它是否生成此 UIImage 的不同实例并将它们添加到单元格中?如果是,为什么我们不担心所有 defaultImage 实例的内存占用(缓存等)(就像我们为 TableViewController 异步获取图像所做的那样)
最佳答案
UIImage
不是 UIView
的子类,也不会添加为您的 UIImageView
的 subview 。 UIImageView
是一个可以呈现UIImage
的UIView
。
由于 UIImage
是一个不可变对象(immutable对象),多个 UIImageViews
可以安全地引用同一个 UIImage
。
UIImage(named:)
初始化器使用内部内存缓存,因此无论您使用默认图像的单个属性,还是使用 UIImage(named:)
initialiser repeatedly 对你的应用程序的内存占用没有影响。
关于ios - 使用相同的默认 UIImage 对象进行单元重用/初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968763/