Posso ligar quando um objeto com pouca referência (do tipo arbitrário) é liberado?

Estou escrevendo uma classe de contêiner no Swift, que funciona comojava.util.WeakHashMap em Java. Minha implementação atual está aqui.

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 }
}

Nesta implementação, os objetos retidos no contêiner são pouco referenciados viaWeakBox, portanto, manter valores nunca impede que os objetos sejam liberados quando não forem mais necessários.

Mas claramente há um problema nesse código; As entradas permanecem mesmo depois que o objeto de sua entrada é liberado.

Para resolver esse problema, eu preciso conectar um pouco antes de um objeto em espera ser liberado e remover sua entrada (correspondente). Eu conheço uma solução apenas paraNSObject, mas não é aplicável aAnyObject.

Alguém pode ajudar-me? Obrigado. (^_^)

questionAnswers(2)

yourAnswerToTheQuestion