Как правильно вернуть 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"]
если вам действительно нужна изменяемая строка
Вы должны автоматически освободить строку перед ее возвратом. Вот что говорят правила управления памятью. Если ваше приложение вылетает, это свидетельствует об ошибке где-то еще в вашем коде.