2012-12-10 1 views
2

Я добавляю ViewControllers рассматривают как подвид другому ViewController,Добавление вид на ViewControllers как подвид

Пример:

В FirstScreen ViewController я это сделать,

  [self.view addSubview:self.secondScreen.view]; 

И только я удалить это от FirstScreen я делаю это

  [self.secondScreen.view removeFromSuperView]; 
      self.secondScreen=nil; 

Но, добавляя e subView Вызывается метод ViewDidLoad, но в то время как removeFromSuperView ViewDidUnLoad не вызывается.

Моего вопрос

1) будет все мои объекты в моей secondScreen получит освобождаться раз я установить экземпляр self.secondScreen к нулю

2) Можно ли сделать так, чтобы я не получу любое предупреждение о утечке или память

ответ

2

Предполагая, что ваше приложение поддерживает с прошивкой 5.0 года, вам нужно добавить его как,

[self addChildViewController:self.secondScreen]; 
[self.view addSubview:self.secondScreen.view]; 

Аналогично для удаления вы можете использовать removeFromParentViewController, а затем удалить из надтаблицы. Проверка apple documentation here.

ViewDidUnLoad устарел от iOS 6.0 и не будет вызван. Проверить the documentation here.

Что касается ваших вопросов,

1) будет все мои объекты в моем secondScreen получат перераспределены когда я установить экземпляр self.secondScreen к нулю

После того, как вы закончите с self.secondScreen, он начнет выпускать объекты внутри этого класса после того, как вы установите его на нуль. Если вы используете ARC, вам не нужно беспокоиться о выпуске. OS позаботится об этих вещах.

2) Можно ли сделать так, чтобы я не получит каких-либо утечек или память предупреждение

Да, это хорошо, если вы используете ARC.Для не-ARC вам необходимо убедиться, что вы правильно опубликовали все переменные в этом классе. В этом случае убедитесь в том, что удерживание/высвобождение сбалансировано.

+1

Благодарим вас за разъяснение –

+0

См. Сессию WWDC 2011 102 «Реализация защиты UIViewController» около минуты 16. Вы не должны использовать эти методы на контроллерах, которые вы не реализовали, потому что у них есть дети, которых они не ожидали. Опасность: «Этот метод предназначен только для того, чтобы вызывать реализацию пользовательского контроллера представления контейнера» – MacMark

0

ViewDidUnload не вызывается, когда представление удаляется из ViewController, оно вызывается, когда представление выгружается из памяти. Документация iOS об этом имеет следующие оговорки:

Вызывается, когда вид контроллера высвобождается из памяти. (не Запрещены в прошивкой 6.0. Представления уже не удаляются при низкой памяти условия и поэтому этот метод никогда не вызывается.)

Обратите внимание на «устаревшим» и тот факт, что «этот метод никогда не вызывается».