Ist es möglich, Apps mithilfe der manuellen Speicherverwaltung (anstelle der automatischen Referenzzählung) mit SWIFT zu schreiben?Swift ohne ARC
Kann ich retain
und release
mit Swift anrufen?
Ist es möglich, Apps mithilfe der manuellen Speicherverwaltung (anstelle der automatischen Referenzzählung) mit SWIFT zu schreiben?Swift ohne ARC
Kann ich retain
und release
mit Swift anrufen?
Sie retain
und release
auf Unmanaged<T>
Werte aufrufen können. Unmanaged
ist im Grunde Objektzeiger, die sich außerhalb der ARC-Verwaltung befinden. Sie müssten jedoch in verwaltete Zeiger konvertieren, um mit Cocoa-APIs zu interagieren.
Aber Sie möchten das nicht tun, außer in Ausnahmefällen. Und ein Projekt, das nicht in ARC konvertiert wird, ist keine solche Situation.
Hinweis 29. August 2014 - Meine Antwort unten nicht korrekt ist, ist es möglich, schauen @newacct Antwort
Nein, Sie können nicht. Lesen Sie mehr über Automatic Reference Counting.
Sie müssen einen sehr guten Grund haben, nicht ARC wollen
kein wirklicher Grund - nur cuirious – YogevSitton
Ah ok. Angst, dass du etwas komisches machen wolltest :) – Antonio
Ich arbeite an einem Nicht-ARC-Projekt und frage mich, ob ich Swift-Code hinzufügen kann, ohne es in ein ARC-Projekt umzuwandeln. – YogevSitton
Es gibt derzeit keine Möglichkeit, ARC für swift so zu deaktivieren, wie Sie es mit objc können (z. B. pro Datei mit einem Compiler-Flag). Wie andere darauf hingewiesen haben, gibt es die APIs 'Unmanaged' und 'UnsafeMutablePointer', die für die Interaktion mit C-APIs konzipiert wurden und Ihnen in einigen Fällen die Arbeit mit ARC ermöglichen. Diese APIs sind jedoch umständlich und erfordern erhebliche Änderungen an Ihrem Code (z. B. für die Interaktion mit Arrays).
Die Swift Leute würden im Allgemeinen wollen, dass Sie Ihren Code neu schreiben, um Strukturen zu verwenden und Referenzprobleme zu vermeiden, wo es möglich ist. Aber das macht die Portierung von bestehendem Code schmerzhaft.
Es gibt einige Vorschläge in meinem anderen Beitrag in Bezug auf ARC Leistung hier: Swift Dictionary slow even with optimizations: doing uncessary retain/release? aber keine sind sehr befriedigend.
Ich bin so weit gegangen, Code zu schreiben, um den kompilierten Mach-O-Objektcode nachzubearbeiten und die ARC-Aufrufe von swift_retain/release aus einigen Klassen als ein Experiment zu entfernen. Aber ich hoffe wirklich, dass Swift jetzt offen ist und wir es einfach modifizieren können, um es in Zukunft flexibler zu machen.
Nach Kommentaren in meiner Antwort unten und @newacct Antwort, ich frage mich jetzt: Willst du ARC auf * einige * Objekte in Ihrem Projekt zu vermeiden, oder deaktivieren Sie ARC für das gesamte Projekt? Könnte das in Ihrer Frage explizit gemacht werden? – Antonio