Wie wird der Speicher der zurückgegebenen C-Typen unter GC behandelt?

8

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?

    
Chris Devereux 05.06.2011, 16:01
quelle

2 Antworten

2

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.

    
JeremyP 05.06.2011, 17:21
quelle
0

Da Sie diese Leerzeichen nicht explizit zugewiesen haben, müssen Sie sich nicht um die Freigabe kümmern.

    
ZhangChn 05.06.2011 16:08
quelle