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界面元素,生命周期如下:
不难看出,其实这些方法都是两两对应的,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(精灵)这些
首先,不管是应用还是游戏都会有一个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)来调整显示的层级,
再在UIWindow之前的就是UIApplication的范畴了
IOS生命周期论:
andriod生命周期:
游戏的视图理解(cocos2d)
网络上志同道合,我们一起学习网络安全,一起进步,QQ群:694839022