Android与IOS作为当前世界上最流行的两大移动端操作系统,都拥有无数的粉丝。那么对于Android或者IOS的开发者来说,这两个系统都拥有什么相同或者不同的地方那?现在让我们一起来了解一下Android和IOS的异同点。

Android、
在Android只中所有的界面都在Activity之中呈现,也就是说只要是用户能够看到的都在Activity之中。Activity创建了一个窗口(Window),我们可以使用setContentView()将需要呈现的视图(UI)放入Window之中进行显示。
先来看一下google对Activity的定义:Android与IOS异同点对比(1)------ 显示_第1张图片
Activity作为用户实际看到的界面,它拥有自己的生命周期,就像google介绍的一样,在一个Activity即将出现的时候,程序会先进入onCreate方法,在这个方法里面去定义一些我们需要去初始化的View控件。
下面是google对Activity生命周期的描述图:
Android与IOS异同点对比(1)------ 显示_第2张图片

`

``    protected void onCreate(Bundle savedInstanceState)一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。例如: setContentView(R.layout.main);当然,也可从 savedInstanceState中读我们保存到存储设备中的数据,但是需要判断 savedInstanceState是否为 null,因为 Activity 第一次启动时并没有数据被存贮在设备中: if(savedInstanceState!=null){  savedInstanceState.get("Key");  }    protected void onStart()该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。    protected void onResume()在 Activity 从 Pause 状态转换到 Active 状态时被调用。    protected void onResume()在 Activity 从 Active 状态转换到 Pause 状态时被调用。    protected void onStop()在 Activity 从 Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。    protected void onDestroy()在 Active 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。

在 android 中,Activity 拥有四种基本状态:

Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。

当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。下图说明了 Activity 在不同状态间转换的时机和条件:
Android与IOS异同点对比(1)------ 显示_第3张图片

IOS:
而在IOS之中,在应用程序开启的时候,IOS会为其创建一个窗口(UIWindow),这个UIWindow就是你应用程序显示界面的载体,一个IOS应用程序只有一个UIWindow对象。
在UIWindow之内被作为界面显示出来的真正与用户交互的是UIViewController(视图控制器)PS:一开始的时候,我也很不理解为什么会有视图控制器这种东西,IOS是MVC设计模式,而MVC讲究的是视图与控制器分离,不知道苹果把这两个东西封装到一起究竟是好还是不好。我们通过继承UIViewController(Android需要集成Activity)来显示界面。UIViewController作为显示界面的管理者,它协调其与模型对象和其他控制器对象,包括其他视图控制器,所以说我们的一切界面跳转都是通过它来进行的(不同于android使用intent),它为你的应用程序提供了一个单一的连贯的用户界面。
看一下苹果是怎么去定义UIViewController的:
Android与IOS异同点对比(1)------ 显示_第4张图片
IOS不同于Android需要使用XML去定义View,在IOS之中显示界面有三种方式
1、使用代码
2、使用nib
3、使用storyboard(本质上也是nib)
先来看一下从网上找到的一个视图载入的流程图:
Android与IOS异同点对比(1)------ 显示_第5张图片
View是指Controller的View。它作为Controler的属性,生命周期在Controller的生命周期内。就是说你的Controller不能在view释放前就释放了。
当你alloc并init了一个ViewController时,这个ViewController应该是还没有创建view的。 ViewController的view是使用了lazyInit(懒加载)方式创建,就是说你调用的view属性的getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view。loadView完成时会继续调用 viewDidLoad。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时 view以及创建好了。
OK,下面来看一下UIViewController的卸载:
Android与IOS异同点对比(1)------ 显示_第6张图片
 当app收到内存警告的时候,会调用每一个UIViewController的didRecieveMemoryWarning方法,我们需要做出响应,释放程序中暂时不需要的资源。通常都会重写该方法,重写时候需要调用super的该方法。如果检测到当前UIViewConroller的view可以被安全释放的话,就会调用viewWillUnload方法,这个我们必须要重视,因为当VC的view消失时候它的subviews可能会被一起释放,我们需要根据具体情况做一些记录,以保证下次能够正确创建,同时不出现内存泄漏。调用viewWillUnload以后,会将self(UIViewConroller).view属性设置成nil,然后在调用viewDidUnload方法,这个时候我们可以释放那些强引用的对象。
 总之
 当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序

1、 alloc                                   创建对象,分配空间2、init                                     初始化对象,初始化数据3、loadView                          从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图4、viewDidLoad                   载入完成,可以进行自定义数据以及动态创建其他控件5、viewWillAppear              视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了6、viewDidAppear               视图已在屏幕上渲染完成

当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反

1、viewWillDisappear            视图将被从屏幕上移除之前执行2、viewDidDisappear             视图已经被从屏幕上移除,用户看不到这个视图了3、dealloc                                 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

官网上的生命周期切换方式:
Android与IOS异同点对比(1)------ 显示_第7张图片

更多相关文章

  1. 更改Android AVD模拟器创建路径位置的方法
  2. Android Button的背景图片拉伸变形解决方法
  3. 安卓隐藏标题栏状态栏 ,实现全屏效果
  4. Android屏幕尺寸、标题栏高度、状态栏高度、当前View尺寸
  5. android button多状态, selector
  6. android设置textview限制字数以省略号显示的方法
  7. Android子控件超出父控件方法

随机推荐

  1. Android(安卓)Testing Fundamentals 1, u
  2. Android(安卓)UI系列:关于按钮点击事件
  3. Android(安卓)SharedPreferences解析
  4. Android常用Manager
  5. Android(安卓)游戏与应用开发最佳学习路
  6. android 使用gdb调试的方式
  7. Android(安卓)软键盘问题总结
  8. Android(安卓)获取网络时间
  9. [置顶] Android4.2.2自增物理按键(framewo
  10. 关于cocos2dx的eclipse的"serializing cd