Странная проблема памяти при применении какао - PullRequest
0 голосов
/ 25 апреля 2011

Я пишу программу Какао для Mac, и она включает в себя средство просмотра изображений. Работа зрителя с картинками заключается в том, чтобы загрузить изображение из Интернета и показать его. Это будет происходить каждый раз, когда я нажимаю кнопку, которая дает ему URL-адрес изображения. Так что это будет часто.

Моя цель в дизайне: каждый раз, когда я переключаюсь на другое изображение или временно закрываю его (это не главное окно), оно освобождает требуемую память. Например, прежде чем я открою программу просмотра изображений для моего приложения, мое приложение занимает 1 МБ памяти. После того, как я открываю картинку, она занимает, скажем, 2М памяти. И после того, как я закрою это, это уменьшит использование памяти до исходного 1M.

Проблема в том, что иногда после просмотра изображения, особенно большого, зритель не отдает всю память, которую он занимал, например, при открытии его стоит около 20 МБ, но после закрытия только 10 из 20 освобождены, еще 10 все еще там и никогда не будут освобождены. Это похоже на утечку памяти, но я проверял свой код и много раз анализировал, я не мог найти утечку памяти, а также, некоторые другие картинки не будут вести себя так.

это странно, возможно, это определенная политика кэширования внутренней памяти Какао? Мы ценим любые предложения. Заранее спасибо!

Обновление: Сегодня, после того как я добавил scrollView в качестве оболочки для imageView, эта странная проблема с памятью кажется почти исправленной.

Спасибо за ваш совет, edc1591, я буду продолжать выяснять, что произошло.

1 Ответ

1 голос
/ 26 апреля 2011

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

  • Включить сборку мусора. Если он уже включен, попробуйте форсировать сборку мусора после выпуска файла образа, например:

    [[NSGarbageCollector defaultCollector] collectIfNeeded];

  • Попробуйте выполнить анализ кучи. Вот хороший учебник по этому вопросу.

Я обновлю этот ответ, как только код будет опубликован.

...