Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何从方法正确返回NSMutableString_Iphone_Objective C_Sdk_Nsmutablestring - Fatal编程技术网

Iphone 如何从方法正确返回NSMutableString

Iphone 如何从方法正确返回NSMutableString,iphone,objective-c,sdk,nsmutablestring,Iphone,Objective C,Sdk,Nsmutablestring,我正在寻找一种返回由NSMutableString构造的字符串的好方法,以避免泄漏: 例如: 检漏仪说这个变量有漏洞 我试过自动释放,但它崩溃了 我试图返回一个副本或将可变字符串复制到nsstring中,但仍然存在泄漏 有什么想法或窍门吗? 每次用户在textfield中键入值时,我都必须调用此方法,因此应用程序会因内存管理不好而崩溃 谢谢您应该使用-autorelease。您的方法应写为: + (NSString*)myMethod { NSMutableString *stringT

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

例如:

检漏仪说这个变量有漏洞

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

有什么想法或窍门吗? 每次用户在textfield中键入值时,我都必须调用此方法,因此应用程序会因内存管理不好而崩溃

谢谢

您应该使用-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]。您应该使用-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]。

你应该在返回字符串之前自动释放它。这就是我们要说的。如果你的应用程序随后崩溃,那就是代码中其他地方存在错误的证据。

你应该在返回字符串之前自动恢复该字符串。这就是我们要说的。如果你的应用程序随后崩溃,这就是代码中其他地方存在错误的证据。

为了澄清问题,如果出现崩溃,故障就在其他地方。您应该确保不会在其他地方释放自动释放的对象。当自动释放池在运行循环的每个周期正常释放时,将释放此方法返回的字符串。如果您在某个地方释放它,然后自动释放池也尝试释放它,那么您的程序将崩溃。每次保留一个对象时,要么自动释放,要么释放。只是为了澄清如果发生崩溃,故障在别处。您应该确保不会在其他地方释放自动释放的对象。当自动释放池在运行循环的每个周期正常释放时,将释放此方法返回的字符串。如果您在某个地方释放它,然后自动释放池也尝试释放它,那么您的程序将崩溃。每次保留对象时自动释放或释放。