Как освободить представление, когда оно не видно в контроллере вкладок? - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть простое приложение с навигационным интерфейсом панели вкладок.Он имеет три вида (A, B и C) и модальный вид.Каждый вид имеет свой собственный контроллер вида и перо.Все они спроектированы и связаны в конструкторе интерфейсов.

Я хотел бы освободить виды, которые не видны.Попробовал освободить и обнулить их, когда появляется другое представление, такое как

[[[self.navigationController.viewControllers objectAtIndex:0] view] release];       
[[self.navigationController.viewControllers objectAtIndex:0] view] = nil;

и т. Д.

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

Буду признателен за вашу помощь

Ответы [ 3 ]

0 голосов
/ 22 сентября 2011

Ты не хочешь этого делать. Позвольте TabBarController обработать ваши контроллеры представления для вас. (Он уже сохранит ваш viewController внутри, поэтому, что бы вы ни делали, из-за синхронизации только счетчик останется не синхронизированным)

Возможно, вы сможете повысить эффективность использования памяти, если освободите объекты в viewWillDisappear. Затем заново создайте данные в viewWillAppear.

0 голосов
/ 23 сентября 2011

как писал @Daryl Teo, вы должны выпустить и воссоздать в viewWillDis/Appear и (вот почему я пишу этот ответ) у вас есть метод с именем didReceiveMemoryWarning, используйте его!
Вы можете просто выходить из системы всякий раз, когда он вызывается, и проверять его с помощью встроенной в симулятор функции проверки памяти.
Просто откройте вкладку, откройте другую вкладку и вызовите эту функцию тестирования. Ваша консоль отладки должна распечатать журнал. Если нет, то вам следует дважды проверить, освободили ли вы все объекты, возможно, кто-то был чрезмерно удержан (что снова должно быть освобождено в viewWillDisappear).

0 голосов
/ 22 сентября 2011

Падение использования памяти может быть незначительным, в зависимости от того, на чем держится выпущенный viewController. Я рекомендую вам выдать NSLog в 'dealloc' viewController, чтобы увидеть, действительно ли он освобождается или если какой-то другой объект все еще удерживает его. Помните, что релиз не освободит память, он сделает это (вызвав dealloc), если количество объектов достигнет 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...