2014-01-11 1 views
0

Я читал документы от Apple design patterns и несколько других руководств, и есть вещи, которые я не могу понять.Жизненный цикл контроллеров модального обзора?

Я столкнулся с проблемой передачи переменных между viewControllers, и я увидел опцию delegate. Чем я понял, что если вы идете от viewControlA до viewControlB, и вам нужно обновить mutableArray от B до A, вы можете отправить делегата из B и A, чтобы получить его.

НО, если A может услышать делегат, что означает, что А еще жив после того, как я пошел в B. Я думал, что только когда у вас есть push между представлениями, предыдущий все еще жив, но когда переход modal, предыдущая сцена фактически мертва.

Каков жизненный цикл каждого класса контроллера вида? Они всегда живы?

ответ

2

Если у вас есть два UIViewController называеться A и B, и вы хотите, чтобы показать B модально, A остается в памяти. Никто не говорит, чтобы удалить A (это верно, пока какая-либо другая часть кода не удалит его).

Таким образом, A может ответить на B до последнего (B) остается presentedViewController из A (presentingViewController).

Об delegate, вы могли бы просто избежать этого. Предположим, например, что A и B как свойство, как

@property (nonatomic, strong) NSMutableArray* myArray; 

Перед тем как представить B как контроллер модальных, можно сказать,

B* b = // alloc init 
b.myArray = [self myArray]; 
// present modally B 

Теперь они будут касаться и тот же массив. Когда B будет уволен (он будет выпущен из памяти, если у вас нет ссылок на него), в myArray (в пределах A) вы найдете изменения, сделанные в B.

Очевидно, что это всего лишь пример. И это не совет, чтобы не использовать delegate s.

Для дальнейших ссылок я бы просто взглянул на Presenting View Controllers from Other View Controllers в Apple Doc.

+0

спасибо большое! поэтому, когда A очищается от памяти? если я перехожу от A к B и C, вся цепочка находится в памяти? и если я перехожу из B в A, отклоняя B, чтобы B не умер? – Curnelious

+0

@Curnelious Вам нужно думать в терминах графа объектов. ROOT -> A -> B. Если B уволен, теперь у вас есть ROOT -> A. Если ROOT отклонит A, у вас будет только ROOT. Постскриптум Upvote тоже, если хотите. Приветствия. –

+0

@Curnelious Очевидно, вам нужно посмотреть на удерживающие циклы. См. Мой ответ на этом http://stackoverflow.com/questions/11168916/weak-or-strong-for-iboutlet-and-other/11170327#11170327. Он охватывает множество аспектов. –

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

  • Нет связанных вопросов^_^