2016-12-28 3 views

Antwort

2

, jedes Objekt Sie wissen über können schwach referenziert werden. Der vorherige Satz in den Dokumenten beschreibt die Ausnahmen von der Regel: "d. H. Es hat einen benutzerdefinierten Retain/Release-Mechanismus, der verhindert, dass die Laufzeit das Objekt schwach speichern kann". Kein Objekt, das Sie wahrscheinlich registrieren möchten, passt zu dieser Beschreibung.

+1

Übrigens, vielen Dank, dass Sie auf diesen Hinweis hingewiesen haben. Ich wusste nicht, dass wir uns nicht mehr manuell abmelden mussten. – matt

+0

Sicher Sache! Vielen Dank für Ihre Antwort. :-) – ma11hew28

4

Es gibt einige Informationen hierzu finden Sie im Clang documentation:

Es explizit für Objective-C-Klassen ist nicht zulässig __weak Referenzen zu unterstützen. Es ist undefiniertes Verhalten, eine Operation mit Semantik einer schwachen Zuweisung mit einem Zeiger auf ein Objective-C-Objekt auszuführen, dessen Klasse keine __schwachen Referenzen unterstützt.

Rationale

Historisch gesehen, war es möglich, für eine Klasse durch seine eigene Referenzzählung Implementierung bereitzustellen behalten zwingende, Freigabe usw. jedoch schwache Verweise auf ein Objekt erfordert Koordination mit seiner Referenzklasse -Count-Implementierung, weil unter anderem schwache Lasten und Speicher in Bezug auf die endgültige Freigabe atomar sein müssen. Daher werden vorhandene benutzerdefinierte Referenz-Count-Implementierungen im Allgemeinen keine schwachen Referenzen ohne zusätzlichen Aufwand unterstützen. Dies ist unvermeidbar, ohne die Binärkompatibilität zu unterbrechen.

Eine Klasse kann darauf hindeuten, dass es nicht schwachen Verweis von unterstützt das objc_arc_weak_reference_unavailable Attribut über die Bedeutung der Schnittstelle Erklärung Klasse. Ein beibehaltener Objekt-Zeigertyp ist schwach-nicht verfügbar, wenn es sich um einen Zeiger auf eine (optional protokollqualifizierte) Objective-C-Klasse T handelt, wobei T oder eine seiner Oberklassen das objc_arc_weak_reference_unavailable -Attribut hat. Ein Programm ist schlecht gebildet , wenn es das __weak Eigentumsqualifikationsmerkmal auf einen schwach-nicht verfügbaren -Typ anwendet oder wenn der Wertoperand einer schwachen Zuweisungsoperation einen schwach-nicht verfügbaren Typ hat.

Darüber hinaus ist es unter der Annahme, noch aktuell, Transitioning to ARC sagt:

Welche Klassen unterstützen keine schwache Referenzen?

Sie können derzeit nicht schwachen Verweis auf Instanzen der folgenden Klassen erstellen:

NSATSTypesetter, NSColorSpace, NSFont, NSMenuView, NSParagraphStyle, NSSimpleHorizontalTypesetter und NSTextView.

Verwandte Themen