iOS4 - быстрое переключение контекста - PullRequest
6 голосов
/ 06 июля 2010

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

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

Также для "dismissModalViewControllerAnimated" и "popViewControllerAnimated" не вызывается dealloc.

У меня есть два сомнения:

  1. Сколько грязной памяти допустимо использоватьв прямом эфире?
  2. Какая альтернатива навигационного контроллера поддерживает кнопку возврата?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 11 февраля 2011

Возможно, ваши UIViewControllers все еще сохранены, если не вызывается dealloc.

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

Один из способов отладки - перегрузка сохранения и освобождения в вашем UIViewController, установка точки останова и регистрация retainCount.

Вот волшебный фрагмент, который я оставляю, бегая, который мне очень помогает, когда я не могу понять, почему я все еще что-то удерживаю.скрытый макрос в CLang, который дает красивое имя функции Objective C в виде массива char.

0 голосов
/ 11 февраля 2011
  1. Когда iOS начинает исчерпывать память, она пытается уничтожить фоновые процессы, которые используют больше всего памяти. Поэтому, хотя абсолютного числа не существует, минимизировать объем используемой памяти - хорошая идея. Оставив его на 30 Мб, равносильно гарантии того, что ваше приложение будет убито
  2. Если вы не хотите менять свой пользовательский интерфейс, нет необходимости использовать что-либо, кроме UINavigationController, для работы с кнопкой возврата. Я думаю, что проблема здесь в том, что если dealloc не вызывается на pop или dismiss, у вас есть утечка памяти

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

...