методы init вызываются программным обеспечением, которое вы пишете, или косвенно вызывается через вызовы [super init ...] (который также инициируется вашим программным обеспечением).
Если на вашем контроллере вида вызывается метод dealloc, то это потому, что он был освобожден до нуля.
Мне интересно, если вас больше интересует выгрузка и загрузка видов. (ОБНОВЛЕНИЕ) Если это так, посмотрите на эту тему . Он объясняет некоторые полезные вещи о loadView и viewDidLoad. Что еще более важно, все ваши настройки представления должны быть помещены в метод viewDidLoad, и все подпредставления должны сохраняться только основным представлением (когда вы используете addSubview). Если вы сделаете это, то можете освободить главное представление (в didReceiveMemoryWarning это наиболее вероятное место). После этого любая ссылка на это представление (через self.view) перезагрузит представления и его подпредставления. Однако в этом процессе контроллер представления не освобождается и не освобождается.
ОБНОВЛЕНИЕ # 2 Вы можете использовать процесс, называемый отложенной загрузкой, для автоматического выделения и инициализации контроллера представления. В этом методе вы делаете экземпляр контроллера представления свойством объекта, который владеет им и использует его. Вы пишете свой собственный метод получения для этого контроллера представления, и в этом получателе вы проверяете, был ли создан экземпляр контроллера представления. Если это не так, вы создаете его в геттере. Затем верните экземпляр из геттера. Когда вы сделаете это, убедитесь, что вы установили экземпляр на ноль, когда вы его отпустите. (Вероятно, это хорошая идея, чтобы убедиться, что он не принадлежит / не используется повторно, когда вы делаете это.
Вот пример такого геттера:
- (MyVC*) myVC {
if (!myVC) {
myVC = [[MyVC alloc] initWithNib...];
// include other things here that you might need for setting the VC up
}
return myVC;
}
Не забудьте установить значение ноль, когда вы отпустите его.