2010-06-26 78 views
2

我正在NSCFString下面的代碼:的NSString stringByReplacingOccurrencesOfString泄漏

NSString *urlString; 

/* leak showing below line */ 

urlString = [urlString stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 

你如何解決此泄漏?

+1

你在哪裏擺在首位獲得urlString?你需要釋放它嗎? – yehnan 2010-06-26 06:06:43

回答

0

很有可能您使用+alloc/initWith...創建了urlString。如果是這種情況,那麼您擁有urlString參考號,並負責在某個時間發佈它。但是,當您到達您粘貼問題的那一行時,由於stringByReplacingOccurrencesOfString:withString:返回一個新的字符串對象(即,它不會修改字符串),因此您將用新的字符串引用覆蓋urlString引用。

我的建議是使用NSMutableString來代替,它允許就地進行字符串操作。

1

你應該做字符串的指針分配而不是靜態分配。變化:

NSString urlString; 

到:

NSString *urlString; 

也有似乎是啓動urlString到某一值時一些其他的代碼到你正在做替換操作。

+0

LOL我不敢相信我沒有看到......哎呀! :) – 2010-06-26 06:11:52

+0

編譯器不會讓這個編譯無論如何。它不可能是泄漏的源頭(至少,不是沒有大量的構建設置)。 – bbum 2010-06-26 06:20:20

0

它從一個我的代碼的是做所有你想要的,我換成白色的空間,但可以更換空字符串(@「」)

NSString * str_aLine; 
    str_aLine = @"sometext \n and \t  and on"; 
    // replace tabs to space 
    str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\t" withString:@" "]; 
    // replace \n to space 
    str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; 
    // replace \r to space 
    str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\r" withString:@" "]; 
    // reduce spaces to one space 
    str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@" +" withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, str_aLine.length)]; 
    // trim begin and end from white spaces 
    str_aLine = [str_aLine stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];