【问题标题】:Memory leak in swift while invoking description method of an instance调用实例的描述方法时迅速发生内存泄漏
【发布时间】:2017-01-09 05:50:05
【问题描述】:

当我在实例 logg 上调用描述时发生内存泄漏

public func writeLog(logs:AnyObject!...) {
        for i:Int in 0 ..< logs.count {
            if let logg = logs[i] {
                var log:String?=logg.description
                log = nil
            }
        }
}

这就是我的称呼

writeLog("Hi")

这是仪器内存泄漏的屏幕截图

回溯泄漏

非常感谢您对解决问题的任何帮助!

【问题讨论】:

  • writeLog1和writeLog一样吗?
  • 是的,现在我已经编辑了我的问题
  • 问题出在那个对象的描述方法上吗?
  • 如果您单击地址字段末尾的箭头,您会在 Instruments 中看到什么? (我认为应该有一个堆栈跟踪来准确显示泄漏内存的分配位置。)
  • @RhythmicFistman - 它只是一个快速字符串......所以在这种情况下描述是它自己的方法。

标签: swift memory-leaks automatic-ref-counting instruments variadic-functions


【解决方案1】:

这是一个类型转换问题 但我不确定 AnyObject.description 的原因。

而不是这个

if let logg = logs[i] {
                var log:String?=logg.description
                log = nil
            }

尝试像这样更改您的代码

  if let logg = logs[i] as! String{
                var log:String?=logg.description
                log = nil
            }

这不会引发任何内存泄漏

因此包括条件分支以检查实例的类型并进行类型转换并调用描述!

瞧! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多