Foundation Release Notes for OS X v10.11 and iOS 9: NSNotificationCenter sagt: "Wenn ein Objekt schwach referenziert werden kann, werden Benachrichtigungen während der Freigabe nicht mehr an den Beobachter gesendet." Wie kann ich sagen "ob ein Objekt schwach referenziert werden kann"? GrundsätzlichWoher weiß ich, ob ein Objekt schwach referenziert werden kann?
Antwort
, 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.
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.
- 1. Woher weiß ich, ob ein BigDecimal nicht analysiert werden konnte?
- 2. Woher weiß man, ob ein Realm-Objekt erfolgreich aktualisiert wurde?
- 3. Woher weiß ich, ob die beiden Zellen zusammengeführt werden?
- 4. Woher weiß ich, ob ein WPF-Fenster geöffnet ist?
- 5. Woher weiß ich, wann ich ein Objekt entsorgen muss?
- 6. Woher weiß ich, ob ein Sound auf Android beendet ist?
- 7. Woher weiß ich, ob ein Bash-Skript mit nohup läuft?
- 8. Woher weiß ich, ob ein System eingeschaltet ist?
- 9. Woher weiß ich, ob ich vom GAC laufe oder nicht?
- 10. Woher weiß man, ob das Raphael-Objekt versteckt ist?
- 11. Woher weiß man, ob ein UITextField ein bestimmtes Zeichen enthält?
- 12. Woher weiß ich, in welchem Teil des Projekts jquery-Skripte und Bootstrap-Skripte referenziert werden?
- 13. Woher weiß ich, ob ich kopieren oder verschieben?
- 14. Woher weiß ich, ob ich eine verschachtelte Shell ausführe?
- 15. Woher weiß ich, ob dies zufällig genug ist?
- 16. Woher weiß ich, ob mein Programm MDAC benötigt?
- 17. Kann festgestellt werden, ob ein Objekt von einem anderen Objekt referenziert wird?
- 18. Woher weiß ich, ob meine App mit Robolectric läuft?
- 19. Woher weiß ich, ob Tabellenkalkulationsfelder mithilfe des Google Apps-Skripts
- 20. Woher weiß ich, ob die Verbindung mit Websockets besteht?
- 21. Woher weiß man, ob ein Telefon angerufen wird oder nicht?
- 22. jquery: woher weiß ich ob ich es habe?
- 23. Woher weiß man, ob ein NSWindow das Frontfenster ist?
- 24. Woher weiß ich, ob GL_OES_standard_derivatives vom Gerät unterstützt wird?
- 25. Woher weiß ich, ob mein Server NUMA hat?
- 26. Woher weiß ich, ob dies eine schwache Einheit ist?
- 27. Woher weiß ich, ob sich eine "Versammlung" tatsächlich geändert hat?
- 28. Woher weiß man, ob ein Video gesehen/versteckt wurde?
- 29. Woher weiß man, ob ein Dialog in Android geschlossen wird?
- 30. Woher weiß ich, ob Bytes vom ChannelWriter nicht geschrieben wurden?
Übrigens, vielen Dank, dass Sie auf diesen Hinweis hingewiesen haben. Ich wusste nicht, dass wir uns nicht mehr manuell abmelden mussten. – matt
Sicher Sache! Vielen Dank für Ihre Antwort. :-) – ma11hew28