iphone – 当我在Swift中销毁我的对象时,它不会释放我的RAM内存
发布时间:2020-12-14 18:59:18 所属栏目:百科 来源:网络整理
导读:这是一个测试,一个创建动作和一个破坏对象的动作,但是当我摧毁它时,我的RAM仍然使用相同数量的内存(大约30mb). var missileImage: UIImageView!weak var img: UIImage!@IBAction func createImg(sender: AnyObject) { missileImage = UIImageView(frame: CGR
这是一个测试,一个创建动作和一个破坏对象的动作,但是当我摧毁它时,我的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(命名:)缓存图像.在收到内存警告之前,这些内容不会被释放.也就是说,即使你的应用程序处于后台,它们也会在那时自动释放(如果你在后台发出警告,通常你没有机会减少内存).缓存使用NSPurgableData,这就是为什么它可以做到这一点.缓存清除非常聪明.它将删除数据,但保留文件信息,因此下次访问图像时,它将自动重新加载,您将永远不会注意到图像已从内存中清除(除了小的加载延迟) . iOS也可以在没有显示的情况下随时卸载缓存的图像,但我不知道任何文档可以准确地解释何时会发生.
如果您甚至有可能再次需要此图像,则应将其保留在缓存中.从磁盘读取是非常昂贵的,Apple会为您提供缓存以帮助您避免这种成本.但是,如果您不太可能再次显示此图像,则可以使用UIImage(contentsOfFile :)来避免缓存.这不会缓存图像.尽管Apple会为您清除缓存,但如果不必要,可以避免创建内存警告. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |