ios - 使用相同的默认 UIImage 对象进行单元重用/初始化

标签 ios swift uitableview uiimage

我对在 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 是一个可以呈现UIImageUIView

由于 UIImage 是一个不可变对象(immutable对象),多个 UIImageViews 可以安全地引用同一个 UIImage

UIImage(named:) 初始化器使用内部内存缓存,因此无论您使用默认图像的单个属性,还是使用 UIImage(named:) initialiser repeatedly 对你的应用程序的内存占用没有影响。

关于ios - 使用相同的默认 UIImage 对象进行单元重用/初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968763/

相关文章:

Swift 以编程方式为带有闭包的按钮创建函数

ios - 自定义UITableViewCell是否需要使用reuseIdentifier注册?

ios - 通过 Storyboard或以编程方式在 Swift 中仅将深色模式强制为一个 UI 元素

ios - CALayer 的边框颜色和宽度都没有变化?

ios - 如何获取所有已计划或正在执行的OperationQueues并取消它

ios - 将 UITableView 滑动到屏幕上,继续滑动?

ios - 如何隐藏 UITableView

ios - 错误 : Linker command failed: duplicate symbol for architecture x86_64

ios - 使节点动态仅适用于一个对象 Swift 和 Spritekit

swift - watch 应用程序 - 当文本太长时替换...