Android与IOS作为当前世界上最流行的两大移动端操作系统,都拥有无数的粉丝。

那么对于Android或者IOS的开发人员来说,这两个系统都拥有什么同样或者不同的地方那?如今让我们一起来了解一下Android和IOS的异同点。


Android、

在Android仅仅中全部的界面都在Activity之中呈现。也就是说仅仅要是用户能够看到的都在Activity之中。Activity创建了一个窗体(Window),我们能够使用setContentView()将须要呈现的视图(UI)放入Window之中进行显示。

先来看一下google对Activity的定义:

Activity作为用户实际看到的界面。它拥有自己的生命周期,就像google介绍的一样,在一个Activity即将出现的时候。程序会先进入onCreate方法,在这种方法里面去定义一些我们须要去初始化的View控件。

以下是google对Activity生命周期的描写叙述图:

`

``
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 在不同状态间转换的时机和条件:

IOS:

而在IOS之中,在应用程序开启的时候,IOS会为其创建一个窗体(UIWindow),这个UIWindow就是你应用程序显示界面的载体,一个IOS应用程序仅仅有一个UIWindow对象。

在UIWindow之内被作为界面显示出来的真正与用户交互的是UIViewController(视图控制器)PS:一開始的时候,我也非常不理解为什么会有视图控制器这样的东西,IOS是MVC设计模式,而MVC讲究的是视图与控制器分离,不知道苹果把这两个东西封装到一起到底是好还是不好。我们通过继承UIViewController(Android须要集成Activity)来显示界面。UIViewController作为显示界面的管理者。它协调其与模型对象和其它控制器对象,包含其它视图控制器。所以说我们的一切界面跳转都是通过它来进行的(不同于android使用intent)。它为你的应用程序提供了一个单一的连贯的用户界面。

看一下苹果是怎么去定义UIViewController的:



IOS不同于Android须要使用XML去定义View。在IOS之中显示界面有三种方式

1、使用代码

2、使用nib

3、使用storyboard(本质上也是nib)

先来看一下从网上找到的一个视图加载的流程图:



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的卸载:



 当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)------ 显示的更多相关文章

  1. vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接

    vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接 需求:自己app打开的登录页面不显示app下载链接.其他地方打开判断android手机的跳转到android下载页链 ...

  2. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  3. 现在创业做App,先做 Android 还是 iOS?

    随着互联网+的高速发展,现在创业大部分都是在布局移动端,初期往往摆在面前最大的难题是,如何分配有限的成本,在最快的速度内占领市场?这个大难题会影响创始人在团队和产品建设方方面面的决定.缩小至移动App ...

  4. Android开发中的全屏背景显示方案

    引子 不管是Android还是iOS平台中,都可以看到一些应用在启动的时候会先出现一个启动画面(Splash Activity),如QQ.微信等.这个启动画面中往往会将ActionBar和Status ...

  5. 提供给Android和iOS开发人员的UWP移植向导

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:前几天微软发布了一个针对Android和iOS开发人员理解Windows Apps概念 ...

  6. Web程序员开发App系列 - 调试Android和IOS手机代码(补图)

    Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ...

  7. Mac下配置cocos2d-x开发环境(android和ios)

    一.下载cocos2d-x http://cocos2d-x.org/projects/cocos2d-x/wiki/Download cocos2d-x-2.1.4.zip @ June.18, 2 ...

  8. cocos2d-x系列 Mac下配置cocos2d-x开发环境(android和ios)

    一.下载cocos2d-x http://cocos2d-x.org/projects/cocos2d-x/wiki/Download cocos2d-x-2.1.4.zip @ June.18, 2 ...

  9. Cocos2d-x 3.x 头像选择,本地相册图片+图片编辑(Android、IOS双平台)

    大连游戏产业不是很发达,最后,选择一个应用程序外包公司.积累的工作和学习过程中的一点业余生活微信体验,我想分享的游戏小朋友的爱. 在应用开发过程中会经常实用户上传头像的功能,在网上找了N多资料发现没有 ...

随机推荐

  1. Pro ASP.NET Core MVC 6th 第三章

    第三章 MVC 模式,项目和约定 在深入了解ASP.NET Core MVC的细节之前,我想确保您熟悉MVC设计模式背后的思路以及将其转换为ASP.NET Core MVC项目的方式. 您可能已经了解 ...

  2. Typora——自定义设置

    Typora提供自定义设置,在偏好设置里面,有一个主题文件夹,如果对界面的样式进行设定,可以添加一个css文件,命名规范是 github.user.css,下面代码会对h1~h4进行自动序列化 bod ...

  3. oracle数据库定时备份

    现有需求,设计一批处理文件,实现周一全部备份,周二周三周五周六增量备份,周四周日累计备份.并且每日将上个月本日数据删除(如今日8月7号,则删除7月7号的数据).并将备份压缩以减小所占空间. 思路: 备 ...

  4. 树莓派安装CentOS

    1.下载并安装,这里使用的是 centos系统地址:http://mirror.centos.org/altarch/7/isos/armhfp/ 下载CentOS-Userland-7-armv7h ...

  5. HDU_2844_(多重背包)

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. Java入门第37课——猜字母游戏之设计数据结构

    问题        有猜字母游戏,其游戏规则为:程序随机产生5个按照一定顺序排列的字符作为猜测的结果,由玩家来猜测此字符串.玩家可以猜测多次,每猜测一次,则由系统提示结果.如果猜测的完全正确,则游戏结 ...

  7. Microsoft Access Engine

    在64位Win7操作系统中安装Microsoft Access Engine的解决方案 原创 2014年01月06日 19:33:56 44847 现在的Win7系统中安装的一般都是32位的Offic ...

  8. 梦想3D控件 2018.7.26更新

    下载地址: http://www.mxdraw.com/ndetail_108.html 1.  编写所有接口函数使用的CHM文档 2.  增加交互绘制功能 3.  增加案例弧形窗建模案例 4.  增 ...

  9. Spring框架系列(七)--Spring常用注解

    Spring部分: 1.声明bean的注解: @Component:组件,没有明确的角色 @Service:在业务逻辑层使用(service层) @Repository:在数据访问层使用(dao层) ...

  10. 浅谈GFC

    Web页面的布局,我们常见的主要有“浮动布局(float)”.“定位布局(position)”.“行内块布局(inline-block)”.“CSS3的多栏布局(Columns)”.“伸缩布局(Fle ...