Как правильно вернуть NSMutableString из метода

Я ищу хороший способ вернуть строку, созданную NSMutableString, чтобы избежать утечки:

например:

+(NSString *)myMethod{



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


 return numberToReturn;
}

Инструмент утечки сказал, что у меня была утечка с этой переменной.

Я пробовал авто-релиз, но он вылетал. Я пытался вернуть копию или скопировать изменяемую строку в строку nsstring, но утечка все еще присутствует.

Любая идея или трюк? Я должен вызывать этот метод каждый раз, когда пользователь вводит значение в текстовое поле, поэтому приложение вылетает из-за плохого управления памятью...

благодарю вас

2 ответа

Вы должны использовать -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"] если вам действительно нужна изменяемая строка

Вы должны автоматически освободить строку перед ее возвратом. Вот что говорят правила управления памятью. Если ваше приложение вылетает, это свидетельствует об ошибке где-то еще в вашем коде.

Другие вопросы по тегам