当我尝试发布nsmutablestring时,应用程序崩溃,请帮忙

时间:2011-07-18 05:35:08

标签: objective-c ios memory-management nsmutablestring

初始化NSMutableString如下:

 -(NSString*)filterIt:(NSString*)source
{
    temp1= [[NSString alloc] initWithString:[source stringByReplacingOccurrencesOfString:@"rlm;" withString:@""]];
    //NSString *m_temp;
    temp1 = [temp1 stringByReplacingOccurrencesOfString:@"&" withString:@""];
    temp1 = [temp1 stringByReplacingOccurrencesOfString:@"#x" withString:@"&#x"];
    NSRange range = [temp1 rangeOfString:@"&#x"];
    NSRange range1 = NSMakeRange(range.location, 8);
    if (range1.location != NSNotFound) {
        NSString* temp2 = [temp1 stringByReplacingCharactersInRange:range1 withString:@""];
        //[temp1 setString:temp2];
        temp1 = temp2;
        range = [temp1 rangeOfString:@"&#x"];
        while (range.location < [temp1 length]) {
            range1 = NSMakeRange(range.location, 8);
            temp2 = [temp1 stringByReplacingCharactersInRange:range1 withString:@""];
            //[temp1 setString:temp2];
            temp1 = temp2;
            range = [temp1 rangeOfString:@"&#x"];
        }
    }
    //m_temp = [temp1 mutableCopy];
//  [temp1 release];
    return temp1;
}

如果我尝试在dealloc方法中释放此字符串并尝试运行该应用程序我的应用程序崩溃。

请给我一些建议,我该如何发布 temp1

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以将Mutable字符串作为自动发布返回

OR

参考this...

答案 1 :(得分:0)

我假设您正在一个方法中进行此调用。根据您提供的代码,确保代码片段实际上是:

temp1= [[NSMutableString alloc] initWithString:[source stringByReplacingOccurrencesOfString:@"rlm;" withString:@""]];

我假设您正在调用stringByReplacingOcurrenceOfString:withString:to sources。

话虽如此,你声称程序在达到'dealloc'时崩溃了......这意味着temp1在你的代码中被声明为一个实例变量......如果是这样的话,那么正确的代码应该是(假设temp1是一个声明的属性,其中包含retain属性:

self.temp1 = [[NSMutableString alloc] initWithString:[source stringByReplacingOccurrencesOfString:@"rlm;" withString:@""]];

如果temp1不是实例变量也不是属性,您可能希望在方法内部指示temp1是NSMutableString并返回自动释放的对象。