2010-06-26 80 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]];