我们一般不会去重写控制器的init方法,如果重写了控制器的init方法,不能在init方法里调用self.view,此时self.view = nil。
控制器里的self.view是通过懒加载的方式创建的,self.view会调用view的getter方法,在这个getter方法里首先会判断这个view是否存在,如果不存在就会调用[load view]方法,在[loadview]里会加载这个view(如果想在控制里加载别的控件可以在这个方法里写),此时view还没有被加到父View上,[self.view superView]为nil,当view被加载完成后会接着调用[viewDidLoad],在[viewDidLoad]方法里self.view才存在([loadview]方法里view还在创建)。如果控制器是用xib方式创建的,在viewDidLoad方法里self.view的尺寸是xib控制器的尺寸,不会自适应。
当view被添加其他view中之前时,会调用viewWillAppear(此时[self.view superView]只是一块地址空间,并没有父view),而之后会调用viewDidAppear(此时[self.view superView]会存在UIViewControllerWrapperView类型的父view)。
当view从其他view中移出之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear。
当view不在使用,而且是disappeared,受到内存警告时,那么viewController会将view释放并将其指向nil。