【问题标题】:How to manage memory in swift?如何快速管理内存?
【发布时间】:2015-10-29 06:19:36
【问题描述】:

我已将 iPod 库导入到 mediaQuery 变量。

var mediaQuery = MPMediaQuery!

进行查询后,加载库。

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWaring()
mediaQuery = nil }

mediaQuery 设为 nil 可以减少内存使用量?

【问题讨论】:

    标签: ios iphone memory-management swift2


    【解决方案1】:

    Swift 有自己的垃圾收集器。将变量设置为 nil 将释放内存。此代码在 Swift 2 中不起作用,因为您在类型后使用 ! 指定对象必须存在。代码应该如下:

    var mediaquery: MPMediaQuery?
    
    override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWaring()
      mediaquery = nil
    }
    

    【讨论】:

    • 但它没有给我任何错误或警告。我使用了 MPMediaQuery!我将它分配给 nil,它没有给我任何错误。
    • 自动引用计数或 ARC,是一种垃圾回收形式,一旦不再有对它们的引用,对象就会被释放。 ARC 下的每个对象都包含一个引用计数器,作为额外字段存储在内存中,每次为该对象设置变量时递增,每次将对象的引用设置为 nil/null 时递减,或者引用超出范围,一旦引用计数器降为零,对象就会自行删除,调用析构函数并释放分配的内存。
    • Letus,ARC 不是垃圾收集器的一种形式。 Kristina 询问将 mediaQuery 设置为 nil 是否可以减少内存使用量。答案是不。将隐式展开的可选项设置为 nil 不会释放任何内存,也不会给她任何错误。如果她在那之后使用对 mediaQuery 的引用,程序就会崩溃......
    猜你喜欢
    • 2012-12-11
    • 2022-01-26
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2013-05-28
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多