2012-04-02 17 views
1

Es gibt einige Code, den ich von jemandem geschrieben benutze anderes, das ich eine Frage habe ....IOS NSString return-Anweisung

NSString *c = @"test"; // "Local" string 
NSString *d = [NSString alloc]initWithString:@"test"]; // "Heap" string 

const char *c = "test"; 
return [NSString stringWithUTF8String:c]; // ?? 

Ich bin nicht sicher, was die return-Anweisung in diesem Fall zurückkehrt. Ich hätte es geschrieben so etwas wie ...

return [NSString alloc]initWithUTF8String:c]; 

oder

return [NSString alloc]initWithUTF8String:c]autorelease]; 

Warum sollte die return-Anweisung wie oben geschrieben werden?

Antwort

3

[NSString stringWithUTF8String:c] gibt ein Autoreleased Objekt ..so ist es das gleiche Sache wie [NSString alloc]initWithUTF8String:c]autorelease], aber von dem, was ich aus Dokumentation verstehe [NSString stringWithUTF8String:c] macht keine Kopie der Zeichenfolge..so ist es schneller

+0

Ah, ok, ich nehme das sehr an (return fügt alloc autorelease hinzu) wollte aber nur sichergehen. Also muss das c wirklich auf dem Stack oder statisch/global sein und das NSString-Objekt ist eine automatische Freigabe. Vielen Dank – ort11

0

Ich bin mir nicht sicher, was Ihr Problem ist. Wenn Sie sich nicht sicher über den Rückgabewert einer Methode sind, lesen Sie die Dokumentation, und Sie haben Ihre Antwort

+0

Ok, kein Problem. Bitte zeigen Sie auf das genaue Dokument und die genaue Zeile, die das hat und lassen Sie mich wissen, wie lange es dauert, bis Sie es finden. Ich bin nicht so vertraut mit dem IOS Doc-Set und es dauert fast keine Zeit hier und andere können Ihre klaren Antworten genießen. – ort11

+0

"NSString" in Google, erster Link. Dann in der Seitenleiste, erweitern "Klassenmethoden", und dort ist es – ksol

+0

Fair genug, es war ziemlich schnell, aber die Anweisung .... Gibt ein NSString-Objekt, das durch Kopieren der Zeichen eines bestimmten C-Array von UTF8-codierten Bytes initialisiert. .... Erwähnt nicht die Tatsache, dass das Objekt bei einer Rückgabe anders behandelt wird. Vielleicht vermisse ich hier etwas. Wenn ein automatisch freigegebenes Objekt zurückgegeben wird, wird es am Ende der Prozedur nicht freigegeben. Habe nicht viel Zeit in IOS verbracht, also denke ich, dass das Sinn macht. – ort11

2

Vereinbarungsgemäß gibt stringWithUTF8String eine bereits Autoreleased String