NSString stringByReplacingOccurrencesOfString泄漏

时间:2010-06-26 06:00:37

标签: objective-c

我收到以下代码的NSCFString:

NSString *urlString;

/*  leak showing below line */

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

你如何解决这个漏洞?

3 个答案:

答案 0 :(得分:1)

您应该进行字符串的指针分配而不是静态分配。变化:

NSString urlString;

为:

NSString *urlString;

此外,似乎还有一些其他代码会将urlString启动到您正在执行替换操作的某个值。

答案 1 :(得分:0)

您最有可能使用+alloc/initWith...创建了urlString。如果是这种情况,那么您拥有urlString引用,并负责在某个时候释放它。但是,当您到达问题中粘贴的行时,您将使用新的字符串引用覆盖urlString引用,因为stringByReplacingOccurrencesOfString:withString:返回一个新的字符串对象(即,它不会修改字符串就位。)

我的建议是使用NSMutableString代替,这确实允许就地字符串操作。

答案 2 :(得分: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]];