2010-08-27 162 views
0

走線內存管理

[angleLabelInRadians setText:[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]]]; 

當創建一個消息中一個NSString對象,我還需要釋放此NSString的,如果是這樣,我該怎麼做,因爲我的天堂沒有創建一個指向對象的指針?

此外,這是正確的編碼程序,還是這一行太長?將它分成以下形式會更好嗎?

NSString *polyRad = [[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]]; 
[angleLabelInRadians setText:polyRad]; 
[polyRad release]; 

回答

2

除非你身處一個沒有自動釋放池的環境,否則你通常只需要使用其中一個便利功能就可以完成上述任務。

[angleLabelInRadians setText:[[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]; 

如果你不想使用自動釋放,你就必須做

NSString *s = [[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]]; 
[angleLabelInRadians setText:s]; 
[s release]; 
2

有一個簡單的規則:釋放你用「init」或「new」創建的每個對象。在上面的示例中,您可以調用「autorelease」來釋放字符串或靜態初始化程序,如[NSString stringWithFormat:...] - 它在內部使用autorelease。

1

你有兩個選擇:

你suggered的一個:分三種說法。

我個人認爲這比較好。只要看看這些樹狀線,你就清楚地知道你在做什麼。目前還不清楚你想在一條線上做什麼。 (但這是我個人的意見)

或者你總是可以像Grobra說和自動釋放字符串。

使用舒適方法

[angleLabelInRadians setText:[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]]; 

或者乾脆自動釋放該字符串

[angleLabelInRadians setText:[[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]] autorelease]]; 
+1

INIT +自動釋放是完全一樣的事情儘可能的方便方法,以便不知道爲什麼你會永遠想這樣做,當它有一個類的方法。 – Kalle 2010-08-29 16:12:20