如何从方法正确返回NSMutableString

时间:2009-12-02 20:38:43

标签: iphone objective-c sdk nsmutablestring

我正在寻找一种很好的方法来返回由NSMutableString构造的字符串,避免泄漏:

例如:

+(NSString *)myMethod{



 NSMutableString *numberToReturn = [[NSMutableString alloc] init];
 [numberToReturn appendString:@"lorem ipsum"];


 return numberToReturn;
}

泄漏仪器说我泄漏了这个变量。

我尝试了自动释放但它崩溃了 我试图返回一个副本或将mutablestring复制到一个nsstring但是仍然存在泄漏。

任何想法或伎俩? 每次用户在文本字段中键入一个值时,我都会调用此方法,因此应用程序因内存管理不良而崩溃...

谢谢

2 个答案:

答案 0 :(得分:12)

您应该使用-autorelease。您的方法应写为:

+ (NSString*)myMethod {
    NSMutableString *stringToReturn = [[NSMutableString alloc] init];
    [stringToReturn appendString:@"lorem ipsum"];

   return [stringToReturn autorelease];
}

如果发生碰撞,则故障发生在其他地方。

当然,您可以使用返回已经自动释放的实例的工厂方法,将您的方法重写为

+ (NSString*)myMethod {
  NSMutableString *result = [NSMutableString string];
  [result appendString:@"lorem ipsum"];

  return result;
}

或者更好的例子,

+ (NSString*)myMethod {
    NSMutableString *result = [NSMutableString stringWithString:@"lorem ipsum"];
    //...do something with result;
    return result;
}

显然,如果你方法的唯一目的只是返回一个带字符串的新字符串,你可以一起避免整个方法,如果你真的需要一个可变字符串,可以使用[NSMutableString stringWithString:@"lorem ipsum"]

答案 1 :(得分:4)

你应该在返回之前自动释放字符串。这就是the memory management rules所说的。如果您的应用程序崩溃了,那就是代码中其他地方出现错误的证据。