Iphone 如何从方法正确返回NSMutableString
我正在寻找一种返回由NSMutableString构造的字符串的好方法,以避免泄漏: 例如: 检漏仪说这个变量有漏洞 我试过自动释放,但它崩溃了 我试图返回一个副本或将可变字符串复制到nsstring中,但仍然存在泄漏 有什么想法或窍门吗? 每次用户在textfield中键入值时,我都必须调用此方法,因此应用程序会因内存管理不好而崩溃 谢谢您应该使用-autorelease。您的方法应写为:Iphone 如何从方法正确返回NSMutableString,iphone,objective-c,sdk,nsmutablestring,Iphone,Objective C,Sdk,Nsmutablestring,我正在寻找一种返回由NSMutableString构造的字符串的好方法,以避免泄漏: 例如: 检漏仪说这个变量有漏洞 我试过自动释放,但它崩溃了 我试图返回一个副本或将可变字符串复制到nsstring中,但仍然存在泄漏 有什么想法或窍门吗? 每次用户在textfield中键入值时,我都必须调用此方法,因此应用程序会因内存管理不好而崩溃 谢谢您应该使用-autorelease。您的方法应写为: + (NSString*)myMethod { NSMutableString *stringT
+ (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;
}
显然,如果您的方法的唯一目的只是返回一个带有字符串的新字符串,那么如果您确实需要一个可变字符串,您可以避免使用整个方法,并使用[nsmutablestringwithstring:@lorem ipsum]。您应该使用-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;
}
显然,如果你的方法的唯一目的只是返回一个带有字符串的新字符串,你可以避免整个方法,如果你真的需要一个可变字符串,你可以使用[nsmutablestringwithstring:@lorem ipsum]。你应该在返回字符串之前自动释放它。这就是我们要说的。如果你的应用程序随后崩溃,那就是代码中其他地方存在错误的证据。你应该在返回字符串之前自动恢复该字符串。这就是我们要说的。如果你的应用程序随后崩溃,这就是代码中其他地方存在错误的证据。为了澄清问题,如果出现崩溃,故障就在其他地方。您应该确保不会在其他地方释放自动释放的对象。当自动释放池在运行循环的每个周期正常释放时,将释放此方法返回的字符串。如果您在某个地方释放它,然后自动释放池也尝试释放它,那么您的程序将崩溃。每次保留一个对象时,要么自动释放,要么释放。只是为了澄清如果发生崩溃,故障在别处。您应该确保不会在其他地方释放自动释放的对象。当自动释放池在运行循环的每个周期正常释放时,将释放此方法返回的字符串。如果您在某个地方释放它,然后自动释放池也尝试释放它,那么您的程序将崩溃。每次保留对象时自动释放或释放。