Вопрос

Рассмотрим следующий метод, в котором я создаю строку и возвращаю ее.Я хотел бы освободить строительные блоки строки, но тогда строка основана на значениях, которых больше не существует.Что теперь?

У меня утечка памяти, и если да, то как я могу это исправить?

- (NSString) getMiddahInEnglish:(int)day{
NSArray *middah = [[NSArray alloc] initWithObjects:@"Chesed", @"Gevurah", @"Tiferes", @"Netzach", @"Hod", @"Yesod", @"Malchus"];
NSString *firstPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day% 7)-1]];
NSString *secondPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day / 7)]];

NSString *middahStr = [NSString string@"%@ She'bi@%", firstPartOfMiddah, secondPartOfMiddah];

[middah release];
[firstPartOfMiddah release];
[secondPartOfMiddah release];

return middahStr;

}

В конце метода возвращается строка, middahStr не был выпущен.Это проблема?У меня утечка памяти?

Это было полезно?

Решение

Наоборот:Вы слишком отпускаете.

middah вы выделяете и инициализируете.Затем вы отпускаете его.Все хорошо.

firstPartOfMiddah и secondPartOfMiddah, вы вызываете удобный метод NSString "stringWith".Это эквивалентно вызову alloc, init, и автовыпуск. Выпуск их является ошибкой, поскольку они, по сути, передаются на автоматический выпуск для последующего выпуска.

middahStr вы вызываете удобный метод, но возвращаете его.Все хорошо.Он будет выпущен позже пулом автоматического выпуска.

Эмпирическое правило (я уверен, что есть много исключений):Если вы не выделяете его, не освобождайте его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top