2012-02-27 3 views
0

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

[[self addSubview:myView]; 

Затем я нажимаю новый взгляд на стек navigationController, например:

[self.navigationController pushViewController:otherView animated:YES]; 

Что происходит с подвид, что Я добавил к исходному виду. Удалено ли оно автоматически?

Кроме того, если моя программа вызывает эту строку:

[[self addSubview:myView]; 

несколько раз без удаления делает вид, что делать ничего плохого, как создать утечку памяти?

ответ

3

Во-первых, будьте более внимательны к тому, что вы говорите. Вы не добавить подвидов в viewcontrollers, добавить подвид взгляды, то есть (self является контроллером вида)

[self.view addSubView:myView]; 

Кроме того, вы не давите взгляды, но viewcontrollers, т.е.

[self.navigationController pushViewController:otherViewController animated:YES]; 

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

Смотрите так: ваш первый контроллер просмотра имеет вид View1. Вы добавили subview в View1, отлично. Теперь нажатие с использованием UINavigationController вызывает новый вид контроллера над вашим старым контроллером просмотра, поэтому теперь вы видите его вид, View2. Это не имеет никакого отношения к View1.

Чтобы ответить на ваш второй вопрос, см Add same subview multiple times to view

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

+1

Подсветка может не быть после попса. Если ваше приложение получает предупреждение о памяти, контроллеры скрытого представления очищают свои представления, чтобы освободить RAM. Вы должны быть готовы к повторному созданию и повторному добавлению subview при вызове viewDidLoad. – jsd

0

Ну, вы всегда можете использовать тестовый комплект, который поставляется с XCode, чтобы проверить утечку памяти, но я верю, что когда вы вызываете pushViewController, он оставит другое представление в такте. Кроме того, если вы используете UINavigationController, он автоматически добавляет хорошую кнопку возврата для возврата к предыдущему виду.

0

Если вы позвоните по телефону [self.view addSubview: myView];, а затем позвоните по телефону [self.navigationController pushViewController: otherViewController animated:YES];, myView не удаляется автоматически с self.view. Вызов [self.view addSubview: myView]; несколько раз, не удаляя myView, кажется бессмысленным, но вы не создадите утечку памяти.

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