Цвета в инструментах при поиске утечек памяти - PullRequest
4 голосов
/ 31 мая 2010

В настоящее время я выискиваю утечку памяти в моем приложении для iPhone. Я использую Инструменты, чтобы отследить код, который вызывает утечку (становясь все более и более другом Инструментов!). Теперь инструменты показывают две линии: одну темно-синего цвета (строка 146) и одну светлее синего цвета (150). Из некоторых проб и ошибок я узнал, что они каким-то образом связаны, но не достаточно хороши в Objective-C и управлении памятью, чтобы понять, как.

Кто-нибудь знает, почему используются разные цвета и в чем может быть моя проблема?

Я пытался освободить numberForArray, но приложение вылетает при отображении последней строки в представлении выбора.

Все идеи приветствуются!

альтернативный текст http://img338.imageshack.us/img338/2323/instrumentscolors.jpg

(Публикуя это, я также понимаю, что строка 139 избыточна! Так что, уже улучшение ;-)

Ответы [ 2 ]

3 голосов
/ 31 мая 2010

Хорошо, давайте посмотрим на поведение объекта в распределении / владении этим кодом ...

numberForArray присваивается результат -NSString stringWithFormat:, который является автоматически высвобождаемым объектом. Это означает, что вы не хотите выпустить его (как вы обнаружили).

Этот объект затем добавляется в glucoseLoader NSMutableArray, который будет retain его. Вы зацикливаетесь 100 раз, создавая 100 объектов и добавляя их к glucoseLoader. Когда освобождается glucoseLoader, в строке 154 он также освобождает все добавленные к нему объекты.

Но подождите, есть еще: firstComponentRange создается из glucoseLoader с использованием -NSArray initWithArray:. Когда вы это сделаете, все элементы исходного массива будут добавлены к месту назначения, что сохранит их снова.

Итак, когда / как вы выпускаете firstComponentRange?

0 голосов
/ 31 мая 2010

Instruments сообщает вам, что firstComponentRange не выпускается (небольшая утечка). Поскольку массив сохраняет свое содержимое, таким образом, вы также вытекли 100 экземпляров NSString, выделенных в строке, обозначенной более темной полосой (более существенная утечка).

...