2009-10-03 2 views
3

В Xcode Я запускаю программу, которую я написал с помощью прибора для утечкиЯ действительно утешаю память?

В нем говорится, что обнаружены утечки, и все просочившиеся байты продолжают расти.

Я смотрю на просочившиеся объекты, и никто из них, похоже, не из моей программы.

Например QuartzCore OpenGLES libLLVMContainer.dyl libCoreVMClient.dylib libGFXShared.dylib

Это моя вина, что программа утечки памяти или это просто плохой код, написанный яблоком и следует ожидать?

+0

Я запустил сборку и проанализировал и нашел нулевые проблемы. Затем я создал новый проект с шаблонами opengl, поэтому у него был только код генерации яблока. Конечно же, возникли те же самые точные утечки памяти. Поэтому в этот момент я предполагаю, что утечки не являются моей ошибкой. – Mel

+0

Окончательная оценка. Я не совсем понял, как работает инструмент утечки. Программа запускает при запуске очень маленькое число в байтах. Потом больше не просачивался. Если вы фактически продолжаете утечку памяти, тогда панель утечки памяти начинает подниматься вертикально. – Mel

+2

Несколько байтов, пропущенных при запуске, не должны вызывать беспокойства. Сосредоточьтесь на утечках, связанных с тем, что вы делаете в своем приложении. Если ваше приложение течет каждый раз, когда вы касаетесь экрана, скажем, это серьезная проблема. – bbum

ответ

10

Есть всегда утечка или два в рамках Apple, если вы действительно смотреть на них (который является частью моей повседневной работы). Но обычно ничего серьезного или утечки, которые происходят в относительно общем/стандартном коде.

Первый шаг - использовать Построить и проанализировать, чтобы выполнить основную проверку вашего кода. Он поймает много потенциальных утечек, но не всех.

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

Думайте об этом таким образом; ваш код звонит в структуру Apple, которая может обращаться к другим библиотекам и фреймворкам Apple. Когда код Apple возвращается, он возвращает вам часть памяти. Если вы неправильно управляете этой памятью, может возникнуть утечка.

+3

Я также читал, что утечки, которые появляются в симуляторе, отличаются от того, что может отображаться на устройстве. Поэтому я собираюсь перейти на тестирование устройств. – Mel

+0

Yup - различия не огромны, но есть различия. Начните с анализа сфокусированного симулятора, затем переходите к сфокусированному устройству, когда вы отполируете его для выпуска. – bbum

3

Типичная программа будет звонить в сторонние библиотеки, например. Графические интерфейсы. Если программа не освобождает ресурсы, которые она выделяет, они не будут уничтожены. Так что да, это, наверное, ваша вина!

1

Я предполагаю, что у яблока нет утечек памяти. У них есть инструменты. Они определенно провели тестирование. Единственный раз, когда я когда-либо слышал об утечках, в веб-обзоре UIKit. Я бы немного почитал инструменты и убедился, что вы правильно читаете стек.

0

использование сборка и анализ, чтобы найти их