Swift 4 ImageIO_jpeg_Data 中的内存泄漏 UIImage
Posted
技术标签:
【中文标题】Swift 4 ImageIO_jpeg_Data 中的内存泄漏 UIImage【英文标题】:Memory leak UIImage in Swift 4 ImageIO_jpeg_Data 【发布时间】:2018-02-27 17:08:57 【问题描述】:我有两个 UIViewController 用于显示照片,事实是当我在它们之间切换时,我会添加 50-70mb 的 RAM 等等,以此类推。
'
var tags: [TagForRecipe] = [] // CoreData entity
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "tagCell", for: indexPath) as! TagsTableViewCell
cell.tags.text = tags[indexPath.row].nameTag
cell.images.image = UIImage(contentsOfFile: (tags[indexPath.row].image as! URL).path)
return cell
import UIKit
class TagsTableViewCell: UITableViewCell
@IBOutlet weak var images: UIImageView!
@IBOutlet weak var tags: UILabel!
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
'
【问题讨论】:
@Adrian 添加了 TagsTableViewCell UIImage in TableView eating memory的可能重复 您是在对表格视图进行分页还是在“à gogo”加载数据源上的图像数量?顺便说一句,您的数据源中有多少张图片? @GIJOW 可能有不同的数字 是的,我明白了。我的意思是在你的例子中。但没关系,我会按照上面的链接。似乎您正在cellForRowAt
上加载网络图像
【参考方案1】:
我在您的图表中没有看到任何内存泄漏。它只显示到目前为止使用的内存量。内存泄漏是第二行,如果有,则用红色标记。更多信息请查看this链接
如果您的图片太大,请尝试调整它们的大小。这将提高性能,并且您的表格视图在滚动时会很流畅。
【讨论】:
但是内存没有清理,而是永远挂起 @AlexanderGovorukhin 我不认为你有内存问题,如果你有你会收到内存警告并且你的应用程序将被关闭。请听从我的建议并尝试减小图像的大小。 This 也可能有帮助 @AlexanderGovorukhin 您可以使用 this 调整图像大小【参考方案2】:您应该使用 contentOfFiles 设置您的图像,而不是来自情节提要。 删除您的图像出口和情节提要中的图像,然后在 viewDidLoad 中使用此代码:
override func viewDidLoad()
super.viewDidLoad()
if let splashPath = Bundle.main.path(forResource: "bg", ofType: "png")
backgroundImgView.image = UIImage.init(contentsOfFile: splashPath)
【讨论】:
以上是关于Swift 4 ImageIO_jpeg_Data 中的内存泄漏 UIImage的主要内容,如果未能解决你的问题,请参考以下文章
swift 如何将Swift 3内置的cocoapod更新为Swift 4