1

У меня серьезная проблема с утечкой памяти с моей программой. Я использую инструменты Apple для отслеживания утечек, и в первые несколько секунд после запуска моего приложения есть сотни и сотни утечек. Проблема в том, что никто из них, похоже, не говорит мне, откуда вытекает утечка.Устранение утечек памяти в Cocoa/ObjC

Я прошел все классы и удостоверился, что все, что было выделено, было выпущено в конце, и сбор мусора также включен. Еще одна большая проблема заключается в том, что я попытался запустить мое приложение без сбора мусора, и он просто падает.

Любые советы?

Благодаря

EDIT: Если исходный код нужен, то я могу отправить его

ответ

2

Ваш вопрос помечен как «сбор мусора».

У вас включен GC? Если да, то это инструмент командной строки? Вы назвали objc_startCollectorThread() как первый элемент в вашем main()?

Если у вас включен GC, анализ утечек на Leopard покажет довольно много ложных срабатываний при определенных обстоятельствах. Если у вас есть доступ к Snow Leopard, я предлагаю вам провести анализ там, поскольку инструменты значительно улучшены.

Статический анализатор clang & Приборы полностью ортогональны. Вам нужно использовать оба, потому что статический анализатор не найдет все возможные утечки в вашем коде. В частности, он не найдет ситуаций, когда, скажем, у вас есть неограниченный рост кеша или глобальный изменяемый набор, который ненадлежащим образом укореняет графические объекты.

Как только вы устранили все проблемы, обнаруженные статическим анализатором, используйте инструменты.

+0

Включена GC, ее приложение GUI Cocoa, а не инструмент командной строки. Я исправил все утечки, сообщаемые анализатором, но Instruments по-прежнему сообщает о большом количестве утечек памяти по причинам, которые я не знаю. Я понятия не имею, где происходит утечка в моем приложении. – indragie

+0

У меня также есть этот таНос: free_garbage ошибка в консоли Xcode отладчика, когда я начинаю мое приложение: MyApp (9874,0xb0103000) таНос: free_garbage: мусор PTR = 0x101bfb0, имеет ненулевой RefCount = 1 Есть как 10 из них каждый раз, когда я запускаю, каждый с разными кодами адресов (например, 0x101bfb0) – indragie

+1

Если у вас есть к нему доступ, используйте Snow Leopard, чтобы сделать вашу разработку. Инструменты анализа памяти - GC и non - в два раза лучше. – bbum

2

Попробуйте запустить свой проект через AnalysisTool и посмотреть, что он находит. Это, по сути, интерфейс GUI для анализатора Clang Static. Он будет работать через ваш код и обнаруживать ошибки, такие как утечки и плохие выпуски, среди многих других вещей. Затем он представит их вам поэтапно, чтобы помочь вам лучше понять, где вы допустили ошибки.

Это фантастический инструмент.

+1

+1 Я постоянно использую Статический анализатор Clang –

+0

Большое спасибо, ребята, этот инструмент намного лучше, чем инструменты. Я посмотрю, что я могу исправить :) – indragie

+0

Я исправил все, что сообщил AnalysisTool, и инструменты все еще сообщают о большом количестве утечек памяти. – indragie

Смежные вопросы