Видя, что malloc выделяет большие куски памяти, - пытаясь выяснить, почему (iPhone) - PullRequest
2 голосов
/ 02 сентября 2010

Я вижу, что мое приложение убито iOS с сообщением о нехватке памяти, однако, отслеживая ход выполнения приложения в инструменте Allocations, я вижу множество malloc, которые, кажется, происходят за пределами кода, который я 'Мы написали.

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

Кто-нибудь знает, почему памятьраспределяется, или я могу как-нибудь это выяснить?

Вот пара снимков с инструментов, показывающих mallocs.Во втором кадре все распределения имеют одинаковую трассировку стека.

One

Two

РЕДАКТИРОВАТЬ

Я отображаю одно большое изображение в качестве фона UIView (1024x768), затем накладываю меньший (квадрат 600 пикселей) UIView с некоторым пользовательским рисунком и третий UIView (квадрат 550 пикселей) поверх тех, которые содержат два квадратных изображения 550px с наложением.

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

Должно ли это быть возможным на iPad?

Ответы [ 3 ]

1 голос
/ 04 сентября 2010

Я выяснил источник проблемы - я использовал

[UIImage imageNamed:@'Someimage']

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

Проблема была очевидна не из-за размера изображения, а из-за размера и количества изображений, которые я использовал. Урок здесь Будьте осторожны с [UIImage imageNamed:] .

Спасибо за помощь, парни!

1 голос
/ 02 сентября 2010

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

На скриншоте кажется, что для отображения изображения выделяются большие блоки.

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

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

EDIT

Все ли изображения имеют одинаковый размер с отображаемым? (т.е. вы пытаетесь отобразить фотографию 5M в качестве фона 1024x768?) Если нет, то вам, вероятно, нужно уменьшить их до размера, который вы отображаете, или, по крайней мере, ближе.

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

0 голосов
/ 02 сентября 2010

Mallocs могут возникать внутри других API, которые вызывает ваше приложение (например, загрузка изображений, просмотры, воспроизведение длинных звуков и т. Д.). Вы можете попробовать изменить размер изображений, представлений, звуков и других объектов на различные величины в виде проверьте и посмотрите, отслеживает ли размер памяти памяти malloc одно из внесенных вами изменений.

...