ios、andriod、cocos2d 视图层次理解

IOS:
首先,不管是应用还是游戏都会有一个UIApplication实例 在整个应用程序代码中,只要有出现UIWindow的初始化代码([[UIWindow alloc] initWithFrame:CGRectMake(20, 20, 320, 480)];),任何地方,不仅仅指在AppDelegate.m文件中创建的, 则[UIApplication sharedApplication].windows的数组(默认该数组是空的)中就会多出这么个window对象(只要该window对象没有释放),数组中每个window的显示顺序是按照代码的执行的先后顺序来存放的,即越后面创建的window会覆盖前面的window对象(只有在window对象设置了makeKeyAndVisible,表示使该window显示出来),但不一定,你还可以通过指定window的windowLevel属性(默认0.0)来调整显示的层级,

    一般情况下,ios的应用不建议在应用中创建多个窗口,所以一般我们看到的就只有在AppDelegate.m文件的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中有个创建window的代码

  然后接下来就在这个创建的window上面添加viewController的view,有两种方式self.window.rootViewController = viewController   和 [self.window addSubView:viewController.view]

再在UIWindow之前的就是UIApplication的范畴了  层级更高了 暂不研究,待续。。。。。。

IOS生命周期论:
    viewcontroller的创建可通过加载xib文件(方法initWithNibName)和代码方式创建(init loadView),其中init最初始的构建,loadView创建viewController中的视图对象,而不是视图view中的其他界面元素(这些应放在viewDidLoad中),定制VC时,如果覆盖loadView方法,不需要调用[super loadView]方法,
     然后再是viewWillAppear、viewDidAppear。dealloc等等
andriod生命周期:
    andriod的所有应用从始至终都只有一个Activity展现在当前屏幕窗口上,但它不是所谓的window对象,类似于viewController的功能,视图控制器,在Activity中也能添加各种view界面元素,生命周期如下:
    Activity生命周期记忆
    不难看出,其实这些方法都是两两对应的,onCreate创建与onDestroy销毁;onStart可见与onStop不可见;onResume可编 辑(即焦点)与onPause;这6个方法是相对应的,那么就只剩下一个onRestart方法了,这个方法在什么时候调用呢?答案就是:在 Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用 onCreate)方法;如果被onDestroy了,则是调用onCreate方法。
   其中,应用程序启动的时候依次调用 onCreate()->onStart()->onResume三个方法
   点击手机Back键,调用 onPause()->onStop()->onDestory()三个方法,应用程序完全退出并销毁内存
   点击Home键,调用 onPause()->onStop()这两个方法,这时候应用程序并没有销毁
   ,当再次进入应用程序时,调用 onRestart()->onStart()->onResume()三个方法
 另外当Activity处于pase stop状态时,虽然此时仍存在于内存,但很有可能系统在内存不足时回收这些activity的内存。

游戏的视图理解(cocos2d)
    在IOS里,cocos2d编写了一个Object对象的子View,EAGView对象,所有游戏的界面呈现都扶着其上,然后再将这个EAGView对象viewController.view = __glView;  [window addSubview: viewController.view];([window setRootViewController:viewController];)
    andriod里貌似没有看到类似的代码,估计在编译cocos的阶段就写编到了libgame.a库里吧
    整个cocos2d就是一坨C++库,整个游戏定义了一个CCApplication对象,然后整个游戏的界面切换靠单例CCDirector(导演)来管理(replaceScene、pushScene等),而场景(Scene就相当于是一个容器,类似UIViewController、Activity一样),界面的具体显示则需在此场景里添加许多的层(Layer),然后在层上添加label button、sprite(精灵)这些
原文地址:https://www.cnblogs.com/cnsec/p/11515854.html