Laut der Dokumentation für die NSString-Methode -UTF8String
:
Die zurückgegebene C-Zeichenfolge wird automatisch zurückgegeben genauso wie ein zurückgegebenes Objekt veröffentlicht werden; Sie sollten das C kopieren Zeichenfolge, wenn sie außerhalb gespeichert werden muss des Autorelease-Kontextes, in dem Die C-Zeichenfolge wird erstellt.
Also unter Speicherverwaltung / Speicher freigeben die folgende Methode:
%Vor%ist in Ordnung, solange die aufrufende Methode das zurückgegebene const char * wie ein automatisches Objekt behandelt.
Unter der Garbage-Collection gibt es jedoch keinen Autorelease-Kontext, soweit mir bekannt ist. Und C-Typen werden nicht als Garbage Collected erfasst. Daher sieht es nicht so aus, als ob der GC den zurückgegebenen Zeiger als ein zurückgegebenes Objekt behandelt.
An was ist seine Lebensdauer gebunden? Wird es zu einem Zeitpunkt in der Runloop des Threads immer noch freigegeben, der später zuverlässig ist, oder verhält es sich unter GC anders als unter Nicht-GC?
Ich denke, der Speicher wird aus dem Garbage Collection-Speicher zugewiesen und der Rückgabetyp ist __strong const char*
. Dies bedeutet, dass es auf normale Art und Weise gesammelt wird, wenn es nicht vom Wurzelsatz der Zeiger erreichbar ist.
Das bedeutet im Grunde, dass Sie es in einer Zeigervariablen speichern müssen, die als __strong
markiert ist, oder sie wird irgendwann gesammelt.
Ich würde spekulieren, dass eine unveränderliche Zeichenkette einen Verweis auf die UTF8-Version von sich selbst behält, so dass sie nur einmal berechnet werden muss und daher die UTF8-Zeichenkette wahrscheinlich erst im NSString verschwindet Deshalb müssen Sie sich nicht darum sorgen, dass es normal verschwindet.
Tags und Links objective-c garbage-collection cocoa