1

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

例如:

+(NSString *)myMethod{



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


 return numberToReturn;
}

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

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

有什么想法或技巧吗?每次用户在文本字段中键入一个值时,我都必须调用此方法,因此应用程序由于内存管理不善而崩溃......

谢谢你

4

2 回答 2

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"]如果您真的需要一个可变字符串,则可以使用。

于 2009-12-02T21:11:33.877 回答
4

您应该在返回之前自动释放字符串。这就是内存管理规则所说的。如果您的应用程序随后崩溃,则表明您的代码中的其他地方存在错误。

于 2009-12-02T21:13:04.797 回答