自定义 Subscribable class 中的内存泄漏

Memory leaking in custom Subscribable class

在项目中实现自定义Subscribableclass后

我在应用程序中收到内存泄漏。

代码 class.

open class Subscribable<T> {
    private var _value: T?
    private var _subscribers: [(T?) -> Void] = []
    open var value: T? {
        get {
            return _value
        }
        set {
            _value = newValue
            for f in _subscribers {
                f(value)
            }
        }
    }

    public init(_ value: T?) {
        _value = value
    }

    open func subscribe(_ subscribe: @escaping (T?) -> Void) {
        if let value = _value {
            subscribe(value)
        }
        _subscribers.append(subscribe)
    }
}

我假设 _subscribers 将持有对数组的强引用。

我相信默认情况下属性带有 strong 引用。

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID52

不指定 weakunowned 可能会产生引用循环。

数组中的项也有来自该数组的强引用。

你可能想看看这个

https://marcosantadev.com/swift-arrays-holding-elements-weak-references/