2009-03-18 3 views
2

моего приложения аварии примерно через 20 минут со статусом 101 (из памяти, я полагаю)iPhone из памяти Weird сбой

Отладки с помощью инструментов - ObjectAlloc и Утечки не дают мне никаких намеков. График ObjectAlloc остается на хорошем постоянном уровне около 1 миллиона байт (1 МБ), равно как и Net # распределения. Я избавился от всех утечек.

Я думал, что это может быть связано с количеством потоков, но их отображение в ObjectAlloc также показывает, что они постоянны.

Может ли кто-нибудь указать мне в сторону другого инструмента или другого пути расследования?

+0

Есть ли у вас какие-либо анимации UIImageView (загруженные массивами изображений)? Я слышал об утечках в реализации этого. – philsquared

ответ

3

Исправить все найденные Clang. LLVM Clang Static Analysis

+0

Я обнаружил, что Клану лучше найти утечки, чем инструменты. Это странно, я знаю, поскольку Clang работает с кодом и инструментами работает на запущенной программе, но это правда - у меня было 0 утечек времени выполнения, хотя некоторые из них определенно присутствовали. –

0

Что вы подразумеваете под «хорошим уровнем». Со временем оно не растет? Сколько всего памяти - это может быть просто необходимость в телефоне для какой-либо другой программы, а ваша слишком большая, чтобы не ложиться спать.

+0

Нет существенного повышения, иногда оно увеличивается, когда новый объект загружается, но вы видите, как он падает снова, когда этот объект освобождается.Количество потоков остается постоянным. – adam

0

Код ошибки 101 означает, что ОС iPhone OS покидает ваше приложение. Если вы используете UIImageViews в своем приложении, обязательно управляйте памятью на них. Я обнаружил, что, как только мое приложение пройдет более 10/12 МБ, iPhone завершает его.

Если вы не используете какие-либо изображения (или большие изображения), то ваш код будет слишком большим.

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

Запустите приложение в Инструментах (Запустите -> Начните с инструмента Performamce -> Утечки), чтобы узнать, где находится ваша память.

Надеюсь, это поможет!

1

Помните, что объекты, выделенные системой (и в том числе такие вещи, как изображения и звуки), не отслеживаются в Инструментах (хотя, конечно, показатели сохранения верхнего уровня делают). Таким образом, возможно, что вы загружаете изображения, скажем, которые не будут вносить большой вклад в использование памяти в качестве шоу, но могут истощить много реальной памяти!

Если ни одна из них не ударяет по аккордам, вы можете попробовать субтрактивный подход к отладке - (возьмите копию своего проекта), вырезайте куски функциональности, пока проблема не исчезнет, ​​или вы получите наименьшую возможную вещь, которая ее воспроизводит. Это должно по крайней мере помочь вам найти место узкого места. По общему признанию, это будет сложно (а), потому что вам придется подождать 20 минут или около того каждый раз, когда вы тестируете (но если вы сделаете это фоновой процедурой, это не так уж плохо) и (б), поскольку природа проблем с памятью заключается в том, что там может быть не одна причина, а критическая масса меньших причин.

Удачи вам!

+0

Ha. Да, я делал именно это в течение нескольких дней и сузил проблему до определенной части кода, которая действительно включает загрузку изображений. Однако в какой-то момент изображения вносили вклад в график в инструментах, и мне удалось получить это исправление. Может быть, они все еще где-то скрываются? – adam

+0

Определенная часть UIImageViews будет способствовать графику (той части, которая находится в самой какао). Я считаю, что непрозрачные данные CGImage выходят за рамки того, что отслеживает инструменты, так что вы, возможно, не прибили все это. – philsquared

1

Мои впечатления от Object Alloc не были такими замечательными. Это не всегда дает вам фактическую память, используемую вашим приложением.

Вместо этого используйте Object Alloc с Activity Monitor. Убедитесь, что вы используете опции «Физическая память бесплатно» и «Физическая память» на мониторе активности. Это точно скажет, сколько памяти использует ваше приложение.

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