2013-11-03 3 views
1

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

Вот сценарий:

  1. У меня есть 3 Вид контроллеров на раскадровке (ни один из них не вернулись с кодом на данный момент)
  2. 1-ый (главная) имеет 7 UIbuttons, 4 UIlabels , и 3 UIImages, ни один из них еще не подключен к файлу h.
  3. Я использую одну из кнопок для подключения к следующему виду (модальный) и создаю одну кнопку на втором представлении, чтобы подключиться к третьей, и, наконец, кнопку на виду 3 для подключения к главному виду.

Кажется очень простым. Однако, когда я запускаю его на инструментах/распределении, я вижу, что каждый раз, когда я возвращаюсь из представления 3 в основной вид, я вижу большой прыжок на живые байты (раунд 1 МБ). (Recap: кода «H» или «M» пока нет). Затем я попытался удалить некоторые кнопки и метки и повторить выделение. Я вижу, что живые байты все еще увеличиваются, но с меньшим количеством ... ясно, что существует неограниченная проблема роста памяти (я думаю).

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

Большое спасибо!

PS. нет утечки, найденной в отчете, и они растут на постоянной сумме ...

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

[self dismissViewControllerAnimated:YES completion:nil]; 

mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:Nil]; 

UIViewController *go2= [mainStoryboard instantiateViewControllerWithIdentifier:@"view2"]; 

[self presentViewController:go2 animated:YES completion:nil]; 

ответ

2

вы никогда не должны «вернуться» к предыдущему контроллеру с помощью SEGUE (если вы не используете разматывания SEGUE), потому что перетекает всегда создают новые контроллеры представления. Итак, вы действительно не возвращаетесь к основному виду, вы создаете новый экземпляр этого. Когда вы проходите этот цикл, вы добавляете все больше и больше контроллеров просмотра, и ни один из них никогда не будет освобожден. Чтобы исправить это, вы должны либо использовать разматывание, чтобы вернуться к основному виду, либо вернуться в код с помощью функции rejectViewControllerAnimated: завершение:

+0

Thx Rdelmar! это означает использование чего-то вроде UIViewController * goback = [mainStoryboard instantiateViewControllerWithIdentifier: @ "main_one"]; [self presentViewController: goback animated: YES завершение: nil]; также создаст новый VC? – Summerhei

+0

Я попытался использовать shutViewControllerAnimated: завершение: но все это просто приостановлено и не может идти никуда =. = – Summerhei

+0

@Summerhei, да, это создает новый экземпляр. – rdelmar

Смежные вопросы