Утечки памяти Objective-C - PullRequest
       9

Утечки памяти Objective-C

0 голосов
/ 09 января 2012

Я просто исследую некоторые утечки памяти в моем приложении, я использую Xcode 4.0.2. Я запустил инструмент анализа в XCode, и было выявлено несколько утечек памяти. Я относительно новичок в Objective-C, это мое первое приложение. Я вставил код здесь:

http://pastie.org/3155043

Я добавил комментарии к приведенному выше коду, где происходят утечки памяти.

Утечка памяти первая: метод возвращает объект Objective-C со счетом удержания +1 (ссылка на владельца).

Утечка памяти 2: Объект, размещенный в строке 248 и сохраненный в 'imagesNames', не упоминается позднее в этом пути выполнения и имеет счет сохранения +1 (объект утечка).

Утечка памяти Три: потенциальная утечка объекта, выделенного в строке 246 и сохраненного в 'cmpWordoutStr'.

Любая помощь приветствуется.

С уважением, Стивен

Ответы [ 4 ]

1 голос
/ 09 января 2012

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

Утечка 2) Вы выделяете / инициируете строку NSString и назначаете ее переменнойэто никогда не выпущено.Это неправильно по двум причинам:

  1. Для каждого alloc где-то должен быть соответствующий релиз.
  2. Нет смысла делать alloc / init для пустой строки.Если вы хотите пустую строку, просто используйте @"".

Leak 3) По сути то же самое, что (2).

(Вам действительно нужно получить хорошую книгу по Objective-Программирование на C, изучение и повторное изучение раздела об управлении хранилищем. В противном случае вы будете спотыкаться в темноте.)

1 голос
/ 09 января 2012

Сначала вы выделяете объект

NSString *cmpWorkoutStr = [[NSString alloc] init];

, а затем переназначаете указатель, не освобождая память:

cmpWorkoutStr = [cmpWorkoutStr stringByAppendingString:indWorkoutStr];

отсюда утечка.

Я не сделалне анализирую ваш код подробно, но я думаю, вы действительно хотите NSMutableString там.

1 голос
/ 09 января 2012

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

В АРК или не в АРК?Каковы плюсы и минусы?

Надеюсь, это поможет:)

0 голосов
/ 14 января 2012

Как предложил Том Андерсен выше, я использовал автоматическое освобождение, и это решило проблему, пример ниже:

NSString *cmpWorkoutStr = [[[NSString alloc] init] autorelease];
NSString *imageNames = [[[NSString alloc] init] autorelease]; 

С уважением, Стивен

...