Wie wir wissen, __unsafe_unretained
ist nicht so sicher wie __weak
, also warum übersetzt J2ObjC Feld mit @Weak
als __weak
aber __unsafe_unretained
?Warum übersetzt J2ObjC kein Feld mit @Weak als __weak, aber __unsafe_unreteained?
0
A
Antwort
2
Zwei Gründe:
__weak funktioniert nur im ARC-Code und die JRE Emulationsbibliothek mit ARC aufgrund einer spürbaren Leistungs Kosten nicht gebaut.
In Ziel C kann man testen, ob ein __schwäches Feld freigegeben wurde, indem man testet, ob es Null ist. Da es für normale Referenzen keine Möglichkeit gibt, dies in Java zu tun, ist der von diesem Verhalten abhängige Code plattformabhängig (dh er funktioniert unter Android nicht gleich).
J2ObjC unterstützt die java.lang.reflect Paket, wenn Sie also eine plattformübergreifende Art und Weise der Verwendung von schwachen Referenzen möchten, verwenden Sie WeakReference statt @Weak.
Verwandte Themen
- 1. Warum __weak __typeof __ (Aufgabe) weakTask = Aufgabe in AFURLSessionManagerTaskDelegate?
- 2. Wie __weak Referenz in Clang verwenden?
- 3. __weak typeof (self) weakself = self ODER __weak MyObject * weakSelf = self?
- 4. Graylog kann kein Feld als numerisch sehen
- 5. Weak Classifier
- 6. NPM Warnt "Kein Repository-Feld", aber ich habe kein Repository
- 7. Kein Retain-Zyklus, aber warum wurde Retain-Cycle-Warnung erhalten?
- 8. J2ObjC - Android Libraries
- 9. Unterschied zwischen __weak UIDataType * weakSelf und UIDataType __weak * weakSelf?
- 10. Android Context Weak Reference
- 11. "Referenced from" -Fehler beim Erstellen mit j2objc
- 12. Weak Delegat wird Null
- 13. Warum gibt die Initialisierung zu "weak" in Swift "nil" zurück?
- 14. Warum __weak Objekt wird zum Autorelease-Pool hinzugefügt?
- 15. DES verschlüsseln, aber Fortify Bericht Weak Encryption auf PHP 5.5.22
- 16. Kein Absturz, aber weniger als 100% Stabilität
- 17. Kein GROUP BY-Ausdruck, aber warum?
- 18. Anfänger Datenbank-Design - Weak Entity
- 19. Warum wird ein Feld viel langsamer eingestellt als ein Feld?
- 20. PostgreSQL postet kein Feld
- 21. Statische Bibliothek und -weak-lSystem
- 22. Wie man j2objc einstellt und benutzt
- 23. Warum gibt Django kein Datetime-Feld aus der Datenbank zurück?
- 24. NSFetchedResultsController - Sortiere als Zahl, aber als String-Feld
- 25. Übersetzen Android Studio Java-Code zu Objective-C mit j2objc, Ist es möglich?
- 26. "__ weak typeof (self) weakself = self;" erwartet ; Am Ende der Deklaration
- 27. Laravel speichert kein Feld
- 28. Warum übersetzt mein Programm alle meine Vertices?
- 29. Warum schwach für Eigenschaft und __weak zum Beispiel Variable verhalten sich
- 30. Weak Linking Foundation und UIKit?
Danke! Ich dachte, dass Javas "WeakReference" als "__week" übersetzt werden würde, aber finde heraus, dass es die übersetzte 'java/lang/ref/WeakReference' Klasse benutzt. Ich schaue in die Quelle der übersetzten 'WeakReference', finde aber nichts wie' __weak', wie funktioniert es unter ARC? (Ich habe eine Zyklusreferenz und muss 'weak' verwenden, um sie zu brechen) – Piasy
Eine __unsafe_unretaent-Annotation löst einen Referenzzyklus auf, weshalb j2objc @Weak dorthin übersetzt. Der einzige Unterschied __unsafe_unreadyed und __weak ist, dass letzterer auch das Feld auf Null setzt, wenn die Instanz deallociert wird. Das ist kein Problem für übersetzten Code, da der Compiler keine Verweise auf die Felder der Instanz zulassen darf, wenn eine Instanz deallociert wird. Wenn Sie das Feldverhalten in Ihrem Code auf Null setzen müssen, verwenden Sie eine java.lang.ref.WeakReference. – tball
Danke für Ihre Antwort! Ich habe zu 'java.lang.ref.WeakReference' gewechselt, aber ich bin ein bisschen neugierig, wie funktioniert die übersetzte' java.lang.ref.WeakReference' in objc, benutzt sie '__weak' intern? – Piasy