Вы должны действительно вызвать эти методы вручную. Это собственный способ управления и отображения представлений VC, поэтому вы сами можете определить, когда каждый подчиненный контроллер получает вызовы жизненного цикла.
В VC_MAIN создайте метод showVC: newVc, который будет вызывать
[newVc viewWillAppear]
[mainView addSubview:newVc.view]
[newVc viewDidAppear]
аналогично, создайте hideVC: который будет вызывать viewWill / DidHide
в вашем VC_Main viewWillAppear, вызовите метод showVC соответствующим образом, основываясь на текущей конфигурации, и каждый раз, когда вы переключаете ваши представления, методы будут вызываться правильно.
Это старый вопрос, который частично обрабатывался на iOS5, но все еще прекрасно работает таким образом и полностью обратно совместим с iOS3.