UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainscreen] bounds]; levelViewController = [[LevelViewController alloc] init]; window.rootViewController = levelViewController; [window makekeyAndVisible];
a) VC会调用它的loadView方法。 LoadView的默认方法会做这两件事情: i.如果vc是用storyboard来分配的,则从storyboard上load所有views ii.如果vc不是由storyboard来分配的,那么将给view属性分配一个空的view对象。 b) 会调用viewDidLoad方法,去允许子类进行一些子对象的操作。
a) 接收 low-memory warning b) 每一个view都会调用didReceiveMemoryWarning方法。如果重写这个方法,需要去在里面release任何不再使用的vc对象和内存。 千万不要去释放vc的view。 c) Vc会调用viewWillUnload方法去通知子类views要被释放。覆盖viewWillUnload方法一般来说是需要在view destroy之前去save一些变量。 d) 将view属性置为nil e) Vc调用了viewDidUnload方法去通知子类views已经remove了。子类一般会在这个方法里去移除对这些views的strong引用。
a) 覆盖vc的shouldAutorotateToInterfaceOrientation:方法并且生命需要支持的方向。 b) 配置自己vc的view来自动适应view的方向变化。
a) Window检测到设备方向变化 b) Window会寻找一个合适的vc并调用它的shouldAutorotateToInterfaceOrientation:方法去检测它是否应该支持新的旋转; c) 如果新的旋转被支持,window调用vc的willRotateToInterfaceOrientation:durition:方法 d) Window会调整vc的view的bounds e) Window会调用vc的didRotateFromInterfaceOrientation:方法。
a) 在旋转过程中禁止event传递。减少意外; b) 存储可见的Map区域。使得Map尽可能和旋转前保持一致; c) 针对复杂的view继承关系,使用view截图来替换视图 d) 在旋转后重新load任何可见的table e) 使用旋转通知去更新app状态信息。