This might help you I am using pretty much the same code to load my UIViewController (called LessonScrollView) into the UIScrollView. The method is called when in the scrollViewDidScroll method , Try this:
[controller.view removeFromSuperview];//to release the controller's view
[imageViewControllers replaceOjectAtIndex:page withObject:[NSNull null]];//to release the actual controller which should lead to it being dealocated
This might help you You don't. UIViewControllers don't get unloaded in low memory, just their views do. This happens in didReceiveMemoryWarning on your own view controllers and gets called automatically when a low memory warning occurs.
This might help you When done with it each time you need to release all references. When you need to show it again, create and use a new instance. This is the only way to ensure viewDidLoad is called each time you need it.
How to load and unload a UIViewController from the window
it should still fix some issue For me, is not a good way to load your view like this. It would be better to load a rootViewController in your AppDelegate and add your current view depending of your plist inside the RootViewController : AppDelegate