Hug*_*nso 23 memory-leaks swift
泄漏是根泄漏,在这个图像中是在同一条线上多次引起,但下面还有另一个被称为单次泄漏并且也会产生泄漏.

这是调用之前声明的代码行之后的调用堆栈.

这是仪器泄漏所在的类:
class Item {
var id: String!
var name: String!
internal init(name: String) {
self.name = name
self.id = name
}
var description: String {
return "(\(id)) \(name)"
}
}
Run Code Online (Sandbox Code Playgroud)
在计算变量描述包含的行中检测到泄漏,return "(\(id)) \(name)"并在将描述更改为:
var description: String {
return "(" + id + ") " + name
}
Run Code Online (Sandbox Code Playgroud)
更新:
要么
var description: String {
if let id = self.id as? String, let name = self.name as? String {
return "(\(id)) \(name)"
}
return "NO AVAILABLE DESCRIPTION"
}
Run Code Online (Sandbox Code Playgroud)
最后一个发出"来自'字符串的条件转换!' to String总是成功".
所以,即使这看起来像一个黑客.
为什么会导致泄漏?
我测试了你的代码并经历了几个线程,我的理解是你必须使用可选的绑定if let子句,当使用字符串插值而不是直接使用可选变量时.对于字符串连接,如果我们直接使用选项,则没有问题.问题在于插值.
var description: String {
if let id = self.id, let name = self.name {
return "(\(id)) \(name)"
}
return "NO AVAILABLE DESCRIPTION"
}
Run Code Online (Sandbox Code Playgroud)
你可以在Swift字符串插值中得到更多关于内存泄漏的信息.看起来像一个bug,可能在将来的版本中它将被解决.