[英]How to return correctly a NSMutableString from a method
我正在寻找一种返回NSMutableString构造的字符串以避免泄漏的好方法:
例如:
+(NSString *)myMethod{
NSMutableString *numberToReturn = [[NSMutableString alloc] init];
[numberToReturn appendString:@"lorem ipsum"];
return numberToReturn;
}
泄漏仪器说我有这个变量泄漏。
我尝试了自动释放,但是崩溃了,我试图返回一个副本或将可变字符串复制到nsstring中,但仍然存在泄漏。
有任何想法或技巧吗? 每当用户在文本字段中键入一个值时,我都有一个要调用此方法的应用程序,因此由于内存管理不当而导致应用程序崩溃...
谢谢
您应该使用-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"]
。
您应该在释放字符串之前自动释放该字符串。 这就是内存管理规则所说的。 如果您的应用程序随后崩溃,则表明代码中其他地方存在错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.