【问题标题】:Swift: Who can help to find out the reason in the code that causes memory leak [closed]Swift:谁能帮助找出导致内存泄漏的代码中的原因[关闭]
【发布时间】:2016-06-17 18:30:52
【问题描述】:

我正在做一个演示,但我发现当我从相机拍照时内存会增加。所以肯定有什么东西导致内存泄漏。如何检查它在哪里?

这是我写的示例代码:

https://github.com/AarioAi/NotesOpen/tree/master/Swift/10.1.1%20Photo%20-%20Avatar


效果视频如下:

https://www.facebook.com/AarioAi/videos/vb.100011236983846/179251062459459/?type=2&theater

【问题讨论】:

  • 是什么让你认为实例没有被释放? (而且不要在操场上尝试!)
  • @MartinR 为什么不呢?查看我的“答案”
  • @user3441734:在 Playground 中存在一些内存管理问题,但你是对的,这也适用于 Playground。 ——但是问题就不清楚了。
  • 我发布了一张图片,说明 Counsel::deinit() 不起作用....
  • 我无法重现该问题。即使使用屏幕截图中的代码,也会调用 deinit,并打印“Counsel::deinit()”。

标签: swift memory-leaks swift2 automatic-ref-counting


【解决方案1】:
class Counsel {
    let bias:String = "Bias"
    var scale: Void -> String? = {
        return "Scale bias"
    }
    deinit {
        print("deinit")
    }
}

do {
    var counsel:Counsel? = Counsel()
    counsel = nil
}

它按预期在操场上打印 deinit。看看 deinit 在哪里被调用

class Counsel {
    let bias:String = "Bias"
    var scale: Void -> String? = {
        return "Scale bias"
    }
    deinit {
        print("deinit")
    }
}

do {
    var counsel:Counsel? = Counsel()
    counsel = nil
    print("still in scope")
}

/*
deinit
still in scope
*/

【讨论】:

  • 为什么 Counsel::deinit() 在我的 xcode 中不起作用?
  • @AarioAi as Martin 伤心,我也无法重现你的麻烦
  • 我截了个完整的截图……是xcode编译器的原因吗?
  • @AarioAi 我在你的 deinit 中没有看到任何打印
  • 天啊,我真是太傻了.... TXS ^_^
猜你喜欢
  • 2011-01-14
  • 2014-10-31
  • 1970-01-01
  • 2011-02-18
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多