2010-01-25 49 views
2

我有一個關於下面兩個例子的快速問題。目前我正在使用頂級示例,因爲iPhone有限的資源,我最好使用底部字符串文本示例手動分配和釋放。有沒有人有偏好與哪一個去?NSString的iPhone分配或字符串文字?

if(activeSegment == 0) { 
    NSString *newText = [[NSString alloc] initWithString:@"Hello World"]; 
    [helloLabel setText:newText]; 
    [newText release]; 
} 

OR

if(activeSegment == 0) { 
    NSString *newText = @"Hello World"; 
    [helloLabel setText:newText]; 
} 

個人而言,我不認爲它的問題在這種情況下,我設置它不會被釋放反正直到應用程序退出的標籤上的文字。

gary

回答

7

第二種選擇絕對好一些。字符串文字只是指向你的代碼的指針,而不是分配的內存。第二個版本重量輕很多。你也可以這樣做:

[helloLabel setText: @"Hello World"]; 
+0

我明白了,是的,這是非常有意義的,很多謝謝你的出色答案。我也會縮短它,因爲你指出直接使用字符串文字。 – fuzzygoat 2010-01-25 17:48:10

+1

爲了進一步解釋,在編譯時爲您的應用程序分配並存儲在二進制文件中的字符串文字,並且每次使用該字符串時都不需要分配。絕對是以犧牲少量二進制大小爲代價的內存大贏。 – 2010-01-26 02:04:32

5

絕對是第二個,如果它只是內存優化。第一個分配一個字符串另外到靜態分配的一個你用它初始化(加上在堆上分配一個對象的開銷)。

NSString *newText = [[NSString alloc] initWithString:@"Hello World"]; 

這段代碼動態分配複製的「Hello World」的,但「Hello World」的有某處存在從第一複製。 ;)

還應當指出的是,編譯器會利用到相同的字符串時,它可以,所以如果你定義一個「Hello World」的五個字符串作爲它們的內容,將有實際上只是一個相同的標記。

+0

謝謝你的出色答案,我希望我可以選擇正確,非常翔實,非常感謝。 – fuzzygoat 2010-01-25 17:50:22