As you can guess from the name, -viewWillDisappear is called whenever the view of the view controller is hidden, deleted, etc. Full description on the UIViewController Link Page .
-viewDidLoad and -viewWillDisappear do not match the set. To save resources, and since some view controllers can never display their views, view managers only load their views the first time they are really needed. -viewDidLoad is called after this.
-viewWillAppear and -viewDidAppear are called just before and after the view is displayed. Similarly, -viewWillDisappear and -viewDidDisappear are called before and after the view is no longer visible.
Finally, -viewDidUnload is a partner of -viewDidLoad and is called if the view is dropped. This can happen when the system needs to free some memory, but it may not happen at all.
In iOS 6, viewWillUnload and viewDidUnload are viewDidUnload
So, to directly address your second question, vcB -viewDidLoad was not called a second time because by then vcB had already loaded its view and no longer needed it.
source share