Kann ich Hooks setzen, wenn ein schwach referenziertes Objekt (beliebigen Typs) freigegeben wird?

Ich schreibe eine Containerklasse in Swift, die wie folgt funktioniert:java.util.WeakHashMap in Java. Meine aktuelle Implementierung ist hier.

class WeakRefMap<Key: Hashable, Value: AnyObject> {

    private var mapping = [Key: WeakBox<Value>]()

    subscript(key: Key) -> Value? {
        get { return mapping[key]?.raw }
        set {
            if let o = newValue {
                mapping[key] = WeakBox(o)
            }
            else {
                mapping.removeValueForKey(key)
            }
        }
    }

    var count: Int { return mapping.count }
}

class WeakBox<E: AnyObject> {
    weak var raw: E!
    init(  _ raw: E) { self.raw = raw }
}

In dieser Implementierung wird auf gehaltene Objekte im Container über @ schwach verwieseWeakBox, so dass das Halten von Werten niemals verhindert, dass die Objekte freigegeben werden, wenn sie nicht mehr benötigt werden.

Aber es liegt eindeutig ein Problem in diesem Code vor. Die Einträge bleiben auch nach der Freigabe des Objekts erhalten.

Um dieses Problem zu lösen, muss ich mich kurz vor dem Loslassen eines gehaltenen Objekts haken und dessen (entsprechenden) Eintrag entfernen. Ich kenne eine Lösung nur fürNSObject, aber es ist nicht anwendbar aufAnyObject.

Könnte mir jemand helfen? Vielen Dank. (^ _ ^)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage