gpt4 book ai didi

iphone - 当我在 Swift 中销毁我的对象时,它不会释放我的 RAM 内存

转载 作者:搜寻专家 更新时间:2023-10-31 08:10:00 26 4
gpt4 key购买 nike

这是一个测试,一个创建对象的操作和一个销毁对象的操作,但是当我销毁它时,我的 RAM 仍在使用相同数量的内存(大约 30mb)。

var missileImage: UIImageView!
weak var img: UIImage!

@IBAction func createImg(sender: AnyObject) {
missileImage = UIImageView(frame: CGRectMake(CGFloat(arc4random() % 100), 200, 50, 30))
img = UIImage(named: "house.jpg")
missileImage.image = img
missileImage.tag = 10001
self.view.addSubview(missileImage)
}

@IBAction func destroyImg(sender: AnyObject) {
self.view.viewWithTag(10001)?.removeFromSuperview()
img = nil
missileImage = nil
}

最佳答案

UIImage(named:) 缓存图像。在您收到内存警告之前,这些不会被释放。也就是说,它们会在那个时候自动释放,即使您的应用程序在后台(如果您在后台时出现警告,通常您没有机会减少内存)。缓存使用 NSPurgableData,这就是它能做到这一点的原因。缓存清除非常巧妙。它会删除数据,但会保留文件信息,因此下次访问图像时,它会自动重新加载,您永远不会注意到图像已从内存中清除(加载延迟很小) . iOS 也可能会在缓存的图像未显示时随时卸载它们,但我不知道有任何文档能准确解释何时会发生这种情况。

如果您有可能再次需要这张图片,您应该将它留在缓存中。从磁盘读取是昂贵的,而 Apple 为您提供缓存以帮助您避免这种成本。但是,如果您不太可能再次显示此图像,则可以通过使用 UIImage(contentsOfFile:) 来避免缓存。那不会缓存图像。尽管 Apple 会为您清除缓存,但最好避免产生不必要的内存警告。

关于iphone - 当我在 Swift 中销毁我的对象时,它不会释放我的 RAM 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26208739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com