Mit C ++ aus Objective C: wie Zuweisen / Frei?
-
08-07-2019 - |
Frage
Derzeit meine Objective C-Klassen verwenden C ++ Objekte durch eine new
tun, wenn der Eigentümer erstellt wird, und ruft delete
, wenn es zerstört wird. Aber gibt es einen anderen Weg? Ich möchte in der Lage sein, sagt sie zu erklären, ein auto_ptr
dessen Umfang dauert die Dauer der Objective-C-Klasse Lebensdauer.
Lösung
Ok, lassen Sie mich annehmen, dass Sie C ++ verwenden und Objective-C auf einem Mac, wenn ich richtig sind Sie wahrscheinlich X-Code verwenden. Also, wenn Sie auf die Eigenschaften (info) Ihr Projekt gehen. Sie können die Kompilierungsoptionen (GCC) überprüfen. Dort gibt es eine Option, C ++ Konstruktoren / Destruktoren zu ermöglichen (die standardmäßig in Cocoa Projekten ausgeschaltet ist).
Dann erhalten Sie default-wie C ++ Scoping, aber ich habe es nicht viel gebraucht und ich habe Probleme mit stark Template-Code (Boost) hat.
Auch ich denke nicht, dass jemand offiziell dieses außer ein paar gute Seelen unterstützt auf GCC arbeiten. Also würde ich empfehlen, dass Sie Unit-Test etwas Derartiges, und merkt, dass etwas schief gehen könnte.
Dennoch C in der Lage zu verwenden ++ in Objective-C, für mich als C ++ Person, ist eine Erleichterung und die Risiken sind die Vorteile wert:)
Andere Tipps
Wenn Sie auch nur die geringste Hoffnung zu behalten, was wenig Vernunft, die wir als Entwickler verlassen haben, werden Sie das nicht tun. Am besten ist es Ihre C ++ Objekte delete
. Im Allgemeinen, während es sicher ist, Objective-C und C ++ auf einer Zeile-für-Zeile-Basis zu mischen, nicht erwarten, die Laufzeit etwas zu tun Phantasie wie Misch Leben zu unterstützen. In der Regel können Sie sicher Ihre Objekte, wenn die obj-c Klasse dealloc genannt wird aber anders als das zerstören, nicht erwarten, Klassenbereich und nicht weinen zu mischen.
In Xcode Ich lese "The Objective-C Programming Language", der Abschnitt mit dem Titel "C ++ mit Objective-C". Ich habe es nicht ausprobiert, aber es sagt, Sie können Verwendung C ++ Klassen als Instanzvariablen. Es verwendet das Null-Argument Konstruktor keine Instanzvariablen zu initialisieren, die Klassen C ++ sind. In dealloc werden die Destruktoren in umgekehrter Instanz Variablendeklaration Reihenfolge aufgerufen.
Ich kam gerade über boost :: shared_ptr mit Cocoa . Beide verwenden eine intelligente Referenzzählung Zeiger (eine, die alle die Referenzzählung für die Zuordnung etc Betreiber für Sie verwaltet).