Im OS X v10.11 beta release notes, finde ich folgendes:Was ist ein „nicht-schwache Nullstellung Referenz“ ist
NSNotificationCenter und NSDistributedNotificationCenter nicht mehr Benachrichtigungen senden registrierte Beobachter, die freigegeben werden können. Wenn der Beobachter als eine Null-schwache Referenz gespeichert werden kann, speichert der zugrundeliegende Speicher den Beobachter als eine Nullstell-schwache Referenz. Wenn das Objekt alternativ nicht schwach gespeichert werden kann (weil es über einen benutzerdefinierten Retain-/Release-Mechanismus verfügt, der verhindert, dass die Laufzeit das Objekt schwach speichern kann), wird das Objekt als nicht schwache Nullsetzungsreferenz gespeichert . Dies bedeutet, dass Beobachter sich bei ihrer Freigabe-Methode nicht abmelden müssen. [Betonung meins]
Das ergibt für mich keinen Sinn. Wenn es eine nicht-schwache Referenz ist, wäre das dann nicht eine starke Referenz? Das NSNotificationCenter wäre also immer noch ein Eigentümer, so dass das Objekt nicht freigegeben wird (bis es manuell nicht registriert wurde), daher ist es in diesem Kontext unsinnig zu sagen, dass es "auf Null gesetzt" ist.
Wenn es sich um eine Art von __unsafe_unretained
Referenz handelt, dann ist die Frage ... wie würde dann NSNotificationCenter Messaging einen Zombie vermeiden?
Für eine beispielhafte Implementierung der Art von Swizzling Ich beziehe mich auf, werfen Sie einen Blick auf [MAZeroingWeakRef] (https://github.com/mikeash/MAZeroingWeakRef/). –
Eine ausführliche Antwort und genau die Art von Erklärung, die ich mir erhofft hatte. Vielen Dank! – natevw