泄漏是一个根漏,在此图像中,在同一行上发生了多次,但下面还有另一个称为单次,也会产生泄漏。
这是调用堆栈after调用前面提到的代码行。
这是 Instruments 定位泄漏的类:
class Item {
var id: String!
var name: String!
internal init(name: String) {
self.name = name
self.id = name
}
var description: String {
return "(\(id)) \(name)"
}
}
在计算变量线上检测到泄漏描述含有return "(\(id)) \(name)"
更改后就解决了描述 into:
var description: String {
return "(" + id + ") " + name
}
Update:
or
var description: String {
if let id = self.id as? String, let name = self.name as? String {
return "(\(id)) \(name)"
}
return "NO AVAILABLE DESCRIPTION"
}
最后一个发出“来自‘String!’的条件转换!”到字符串总是成功”。
所以,即使这看起来也像是一个黑客行为。
为什么会导致泄漏?
我测试了你的代码并经历了几个线程,我的理解是你必须可选绑定if let
子句,当使用字符串插值而不是直接使用可选变量时。对于字符串连接,如果我们直接使用可选值是没有问题的。问题在于插值。
var description: String {
if let id = self.id, let name = self.name {
return "(\(id)) \(name)"
}
return "NO AVAILABLE DESCRIPTION"
}
您可以在这里获取更多信息Swift 字符串插值中的内存泄漏 https://stackoverflow.com/questions/24897936/memory-leaks-when-using-optionals-in-string-interpolation。
看起来像是一个错误,可能在未来的版本中会得到解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)