Непонятная утечка памяти при добавлении изображения к контакту на IOS

В настоящее время у меня есть утечка на этой линии в инструментах, я сливаю несколько сотен тысяч каждый раз, когда это называется-

NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"Icon.png"]);
ABPersonSetImageData(newRecord, (CFDataRef)dataRef, nil);

Когда я удаляю вышеуказанные строки, я в порядке.

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

Я попытался объединить все это в одну строку,

ABPersonSetImageData(newRecord,(CFDataRef) UIImagePNGRepresentation([UIImage imageNamed:@"Icon.png"]), nil);

но я получил те же результаты.

Я бы наполовину ожидал утечки в первый раз, поскольку хорошо известно, что Imagenamed кэширует объект изображения, и сообщалось, что утечка вызовов произошла до iOS4, но я бы не ожидал постоянных утечек.

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


person Peter Johnson    schedule 17.02.2011    source источник
comment
Эти утечки появляются на устройстве? Результаты Симулятора часто показывают фиктивные утечки.   -  person Mike Weller    schedule 26.09.2011
comment
Вы уверены, что CFR выпускаете новую запись, как только закончите с ней?   -  person Jeethu    schedule 26.09.2011
comment
На самом деле, похоже, я не выпускаю его (и я получаю странную ошибку в другом месте, если я это делаю). Я вижу, что он сохраняется на протяжении всего срока службы этого контроллера представления, но не освобождается при выходе. Прошло некоторое время с тех пор, как я работал над этим, я продолжу расследование, когда вернусь к этому проекту для следующего обновления. Спасибо   -  person Peter Johnson    schedule 27.09.2011


Ответы (1)


Я думаю, вам не нужно беспокоиться об этом объекте. Поскольку UIImagePNGRepresentation вернет вам объект autoreleased, утечки памяти не будет. Поскольку dataRef является объектом autoreleased, вы не должны освобождать его вручную.

person YPK    schedule 17.02.2011
comment
Однако каждый раз, когда я использую эту линию, я теряю пару сотен К (измерение в инструментах). Я немного улучшил ситуацию, создав изображение контакта только при создании контакта (я делал это всякий раз, когда обновлялся ранее), но я все равно хотел бы решить эту проблему. - person Peter Johnson; 17.02.2011