我正在寻找一种很好的方法来返回由NSMutableString构造的字符串,避免泄漏:
例如:
+(NSString *)myMethod{
NSMutableString *numberToReturn = [[NSMutableString alloc] init];
[numberToReturn appendString:@"lorem ipsum"];
return numberToReturn;
}
泄漏仪器说我泄漏了这个变量。
我尝试了自动释放但它崩溃了 我试图返回一个副本或将mutablestring复制到一个nsstring但是仍然存在泄漏。
任何想法或伎俩? 每次用户在文本字段中键入一个值时,我都会调用此方法,因此应用程序因内存管理不良而崩溃...
谢谢
答案 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所说的。如果您的应用程序崩溃了,那就是代码中其他地方出现错误的证据。