这是一个使用 ReactiveSwift 的 Swift 类,将 a 包装MutableProperty
在 a 中,并在aProperty
中添加对它的订阅:Property
ScopedDisposable
class Leaker {
let mutableProperty = MutableProperty<Int>(0)
var wrapperProperty: Property<Int> {
return Property(self.mutableProperty)
}
private var disposable: ScopedDisposable<AnyDisposable>?
init() {
let disposable = CompositeDisposable()
disposable += self.wrapperProperty.producer
.startWithValues { value in
print("\(value)")
}
self.disposable = ScopedDisposable(disposable)
}
}
如果我给另一个类一个 type 的属性Leaker?
,然后使用 设置它self.leaker = Leaker()
,这会造成泄漏。通过“创建泄漏”,我的意思是它触发了泄漏工具,显示了一个标记为 的泄漏对象Malloc 32 Bytes
,以及一个包含Leaker.init()
调用的堆栈跟踪Leaker.wrapperProperty.getter
。
为什么会泄漏?我发现很难准确理解是什么导致这里分配的内存永远不会被释放。
其他一些可能有用的事实:
mutableProperty
如果我直接订阅,这不会泄漏mutableProperty
如果我包装在惰性属性而不是计算属性中,这不会泄漏- 如果我创建一个临时的,这不会泄漏
Leaker
,例如let _ = Leaker()