2009-08-10 31 views
0

假設我有一個已經通過alloc/init組合初始化爲字符串的變量。如果我通過處理重新分配內存,是否會泄漏內存?重新分配變量時是否有內存泄漏?

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable]; 
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

這裏是否存在內存泄漏?如果是這樣,我是否需要創建另一個變量(例如s2),執行此分配,然後釋放原始?現在

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable]; 
NSString *s2 = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
[s release]; 

,如果其他字符串就是一個常數,如@「其他的一些字符串」。我需要擔心泄漏嗎?即。

NSString *s = [[NSString alloc] initWithString:@"Some other string"]; 
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

感謝

回答

7

這絕對是一個泄漏。照顧這樣的問題,最簡單的方法是自動釋放宜早不宜遲:

NSString *s = [[[NSString alloc] initWithString:@"Some other string"] autorelease]; 
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

你也可以使用的NSMutableString要做到這一點爲好,地方(如果這不是一個概念上的例子)。

+0

謝謝。你指出的例子是名義上的。我以爲我曾經在某處讀過,在任何情況下都有爲字符串字面量分配內存,所以它永遠不會被釋放。所以它的保留數是無關緊要的。 – farhadf 2009-08-10 17:59:21

+3

的確,您不必釋放/手動記憶管理字符串文字。但是,在你的代碼中,你不要直接賦值字符串,而應該在[NSString alloc]之前。只要你有一個分配,你需要一個(自動)釋放。這不會泄漏:NSString * s = @「一些字符串」; s = [...]; – 2009-08-10 18:32:44

+0

明白了。謝謝。 – farhadf 2009-08-12 16:15:44