Вопрос

Мое приложение вылетает примерно через 20 минут со статусом 101 (полагаю, недостаточно памяти)

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

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

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

Это было полезно?

Решение

Исправьте все, что найдет Кланг. Статический анализ LLVM Clang

Другие советы

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

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

Удачи!

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

Вместо этого используйте Object Alloc с Activity Monitor. Убедитесь, что вы используете & Quot; Physical Memory Free & Quot; и " Физическая память использована " параметры в мониторе активности. Это точно скажет вам, сколько памяти использует ваше приложение.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top