加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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会为您清除缓存,但如果不必要,可以避免创建内存警告.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读