Утечка памяти из библиотеки Foundation и CFNetwork

Я использую инструменты для решения проблем с утечкой памяти для приложения на iPhone. Я просто хотел знать, нужно ли устранять утечки, исходящие из библиотек Foundation и CFNetwork. В частности, утечки происходят из:
1. NSCFString
2. NSConcreteData
3. Общий блок-3584
Поскольку они не указывают напрямую на написанный мною код, как мне их разрешить? , если мне нужно?

Спасибо.


person Lakshmie    schedule 21.04.2010    source источник


Ответы (2)


Почти наверняка утечки памяти происходят из-за вашего кода - в библиотеках Foundation почти нет утечек памяти, если вы тестируете устройство (в симуляторе есть утечки памяти, поэтому вы всегда должны тестировать на устройстве) . Не всегда сразу очевидно, откуда происходит утечка, и это сложно сказать из вашего вопроса, но я предполагаю, что это происходит либо от утечки NSString (NSStrings реализованы с NSCFString под капотом), либо от класса, связанного с сетью, такого как NSURLConnection.

person shosti    schedule 21.04.2010
comment
Хорошо, но если ошибка связана с моим кодом, разве я не получу библиотеку ошибок в качестве имени моего приложения? - person Lakshmie; 22.04.2010
comment
Часто цепочка вызовов методов и функций может быть запутанной, особенно если вы имеете дело с какими-либо потоковыми или асинхронными методами. Например, если вы имеете дело с NSURLConnection, библиотека может отображаться как CFNetwork (я не уверен, что это так, в моей голове, это всего лишь гипотетический пример). При этом в фреймворках есть несколько утечек, и, возможно, вы столкнулись с одной: см. stackoverflow.com / questions / 478242 / leak-generalblock-3584. - person shosti; 23.04.2010
comment
Я тщательно проверил свой код. Все, что было создано с помощью alloc, было освобождено после его использования. Есть ли другой экземпляр создания, для которого мне нужно его выпустить? - person Lakshmie; 23.04.2010
comment
@Lakshmie: В других случаях, когда вам нужно release объекты, нужно использовать методы с copy или new в имени метода (также, если вы retain объект, вам нужно release это позже). Возможно, я сказал преждевременно, когда сказал, что это почти наверняка не код фреймворка - утечка General Block-3584 выглядит так, как будто это может быть из фреймворка. - person shosti; 23.04.2010
comment
Спасибо. Я проверил их все. Я все еще получаю утечки NSConcreteData и NSCFString, и мое приложение не сообщает о них. - person Lakshmie; 23.04.2010

У меня возникли те же проблемы с утечками памяти, которые указывали на CFNetwork и Foundation framework. Небольшое исправление устранило все утечки памяти. При использовании асинхронного HTTP-соединения я столкнулся с этой проблемой.

Проблема:

В делегате - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*) ответ,

Я скопировал NSURLResponse и выпустил.

Решение :

Не копируйте и не выпускайте NSURLResponse. Просто используйте его как свойство asstype в файле заголовка.

person Sumanth    schedule 27.01.2012