При создании представления с использованием alloc и вызове addsubview в другом представлении = 2 сохраняет

#iphone #objective-c

#iPhone #objective-c

Вопрос:

Мне нужно понять, что происходит с точки зрения памяти в этой ситуации. Правильно ли я предполагаю, что при использовании метода addSubview это представление сохраняет новое представление, а затем при вызове removeFromSuperview количество сохранений в этом superview уменьшается до нуля (в конечном итоге)?

Я создаю представление, подобное этому:

 homeViewController = [[HomeViewController alloc]init]; //self retain count = 1
[self.view addSubview:homeViewController.view]; //self retain count = 1; self.view retain count = 1
  

Я удаляю представление следующим образом:

 [homeViewController.view removeFromSuperview]; //self retain count = 1; self.view retain count = 0
  

Ответ №1:

Когда вы выполняете addSubview, оно сохраняет представление, так что вы могли бы автоматически выпустить его, если бы не хотели отслеживать, когда оно больше не использовалось.

Комментарии:

1. Под этим вы подразумеваете «self» или «self.view»? или они одни и те же?

2. содержащее представление сохраняет вложенные представления. Таким образом, ваш self.view сохраняет в HomeViewController.view.

3. Таким образом, removeFromSuperview просто освобождает self.view сохраняется в HomeViewController.больше ничего не просматривать

4. Ну, это также выводит его из иерархии представлений.

Ответ №2:

HomeViewController также сохраняется представление, потому что это контроллер представления. Таким образом, представление не будет уничтожено, если контроллер также не будет освобожден.