2012-04-02 94 views
1

有一些代碼,我使用別人說我有一個問題書面....IOS的​​NSString return語句

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

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

我不知道在這種情況下,return語句返回。我會寫它像...

return [NSString alloc]initWithUTF8String:c]; 

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

爲什麼return語句寫成像上面?

回答

3

[NSString stringWithUTF8String:c]返回一個自動釋放的對象..所以其[NSString alloc]initWithUTF8String:c]autorelease]同樣的事情,但從我從文檔[NSString stringWithUTF8String:c]明白不會複製字符串..所以其更快

+0

嗯,好吧,我假設很多(返回增加alloc autorelease),但只是想確保。所以真的必須在堆棧或靜態/全局和NSString對象alloc alloc autorelease。謝謝 – ort11 2012-04-02 14:54:27

0

我不確定你的問題是什麼。如果你不確定的方法的返回值,查看文檔,你就會有你的答案

+0

好吧,沒問題。請指出具體的文件和確切的線路,並告訴我需要多長時間才能找到它。我不熟悉IOS文檔集,它幾乎不需要時間,其他人可以享受您的明確答案。 – ort11 2012-04-02 14:55:47

+0

谷歌中的「NSString」,第一個鏈接。然後在側邊欄中展開「類方法」,在那裏它是 – ksol 2012-04-02 14:58:35

+0

不夠公平,它很快,但語句....返回一個NSString對象,通過複製字符給定的C數組的UTF8編碼字節來初始化。 ....沒有提到這個事實,對象在回報上被區別對待。也許我在這裏錯過了一些東西。如果自動釋放的對象返回,則在過程結束時不釋放它。在IOS中沒有花費太多時間,所以我想這是有道理的。 – ort11 2012-04-02 15:47:42

2

按照慣例stringWithUTF8String返回一個已經自動釋放串