自定义可订阅类

时间:2018-02-05 14:20:22

标签: ios swift memory-leaks subscription

在项目中实现自定义Subscribable类之后。

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

班级守则。

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将保留对数组的强引用。

1 个答案:

答案 0 :(得分:1)

我认为默认情况下属性带有引用。

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

未指定无主可能会创建参考周期。

此外,数组中的项目也具有来自该数组的强引用。

您可能想查看此

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