IOS 和ANDROID操作系统都是眼下流行的移动操作系统,被移动终端和智能设备大量採用,两者都採用了先进的软件技术进行设计,为了方便应用开发两者都採用了先进的设计模式。

两者在框架设计上都採用了什么技术?都採用了什么设计模式?两者设计思路和应用开发模式有什么异同呢?

  1. 两者都採用了框架模式。

IOS 的框架称为Cocoa Touch。

框架提供两个作用,一是类的集合,每一个类构建一个问题空间,并提供完整的解决方式和服务。二更重要的是框架中的类相互依赖构成一个总体,制订并实现整个应用程序的结构。框架定义的结构是泛型结构,为应用程序提供一个运行的模板,因此很多框架类的实现是抽象的或者有意不完整,这种类通常实现大量的常见代码,但却让工作的重要部分,要么未完毕。要么以安全的默认方式完毕。

由于应用程序结构是通用的,开发者通过框架提供的钩子或其他方式如子类化将其特殊化。以满足特定应用的要求;设计一个应用程序就是将应用程序代码插入到框架提供的设计中来完毕设计,并由框架驱动程序的运行和管理应用程序的生命周期。

要使用框架。开发者必须接受它定义的应用程序结构,然后依据须要,尽可能多的使用和定制它的类。将特定的应用进行改造,以适合该结构。

从广义的隐喻层面而言,框架就像房屋的框架,而应用程序代码就好比大门、窗户、壁板和其它元素,是这些东西让房子与众不同。

IOS 的框架和ANDROID框架都为应用程序提供了多种方式。来改动和扩展其通用行为。

特定于应用的行为加入到框架的一种方式。就是创建框架类的自定子类。子类填补了其超类中的空隙,提供了框架类所缺少的部分。

自定子类的实例。占领其在框架所定义的对象网络中的位置,也继承框架与其它对象合作的能力。

这样的设计模式称为模板模式。

如ANDROID就採用这样的模式来实现应用程序行为的定制化。 ANDROID框架为应用程序提供了ACTIVITY、 SERVICE、Content providers、Broadcast receivers四大应用组件的通用默认实现,应用程序通过子类化这些组件,并依据须要覆盖组件的一些方法就能够完毕一个应用程序开发。

而IOS则採用托付和协议模式来实现应用程序的一些特定行为。

在IOS中, 由Cocoa Touch提供的框架之中的一个UIKit来提供和管理应用程序的行为,包含应用程序的启动直到退出,UIKit 框架管理着应用程序的很多核心行为。

UIKit 框架包含一个UIApplication 对象,UIApplication 对象是应用程序的心脏,它从系统接收事件,然后将事件分派到应用程序实现的自定代码进行处理。

详细的应用程序仅仅需实例化UIApplication 对象对象就可以,无需进行子类化,应用程序的特定行为採用托付和协议模式由一个应用程序托付对象来实现。

应用程序在调用UIApplication 对象的UIApplicationMain函数来启动应用时,通过实例化一个应用程序托付对象并作为參数传给UIApplicationMain函数。

应用程序托付作为 UIResponder 的子类,也实现了UIApplicationDelegate协议。用来处理 UIApplication 对象委派的应用程序相关事件(主要是各种应用程序状态改变事件),来实现应用程序的定制化。

协议模式是osx 操作系统框架採用的特有的设计模式之中的一个。

协议是可编程接口的声明,不论什么类都能够实施它的方法。

与协议相关联的类实例,调用协议的方法,并获取由该类正式採用和实现该协议所返回的值。对象之间的此类通信。产生了一个特定目标。比如解析 XML 代码或拷贝对象。协议接口两边的对象能够通过继承。实施远距离彼此相关。协议因此和托付一样,可作为子类化的替换手段。

Apple 提供的框架,声明了数十个协议。

二  应用开发都採用了模型-视图-控制器(MVC) 设计模式

如IOS框架中的视图控制器对象担当MVC模式中的控制器角色。管理应用程序内容在屏幕上的呈现。视图控制器负责显示和管理单个视图及其分视图,以及那些视图与应用程序的其它部分之间的交互。呈现时。视图控制器将视图安装到应用程序的窗体中,使它们显示出来。

在ios 的UIKit 框架中的UIViewController 类是全部视图控制器对象的基础类, 每一个视图控制器对象是 UIViewController 类的实例。它提供了一些默认功能,用于加载视图、呈现视图和旋转视图,以响应设备的旋转以及几个其它标准的系统行为。应用程序实现时须要对UIViewController 类进行子类化。用来加载应用程序特定视图。

UIKit 和其它框架定义附加的视图控制器类,来实现标准系统界面。如图像挑选器、标签栏界面和导航界面。

视图控制器对象提供基础结构,来管理内容相关的视图并协调视图的显示与隐藏。视图控制器还用来管理应用程序视图的子层次结构。

由于 iOS 应用程序显示内容的空间非常有限,视图控制器也提供了所须要的基础结构,从一个视图控制器中撤出视图。以还有一个视图控制器中的视图来替换。因此,视图控制器是您实施各种类型的内容转换的方式。

视图控制器对象,能够作为自包括的单元来看,它处理其自身视图的创建和销毁,处理其视图在屏幕上的显示。并协调视图和应用程序中的其它对象之间的交互。

应用程序通过串联图或nib资源文件载入视图控制器和相关的视图。串联图或nib资源文件含有视图和视图控制器,应用程序通过它们,将内容呈如今屏幕上。

串联图中的视图。是依据显示它们的视图控制器来组织的。串联图也确定一组视图的转换(称为过渡),将用户从一组视图带到还有一组。

当您创建项目时,主串联图文件的名称通过应用程序包括的 Info.plist 文件里的 NSMainStoryboardFile 键来指定。使用 nib 文件(而不是串联图)的应用程序。能够使用 NSMainNibFile 键替换 NSMainStoryboardFile 键。并使用该键来指定使用的主 nib 文件。

IOS框架的窗体相应一个 UIWindow 对象,UIWindow 对象协调一个或多个视图在屏幕上的呈现。

大多数应用程序仅仅有一个窗体。用于在主屏幕上呈现内容,但应用程序可能会有另外一个窗体,将内容显示在外接显示器上。

要更改您的应用程序的内容,需使用视图控制器,来更改在相应窗体中显示的视图。您不会把窗体本身替换。

除了充当视图的宿主以外。窗体还配合 UIApplication 对象工作。将事件传送到视图和视图控制器。

IOS框架的视图对象包含视图、控制和层对象等对象,视图和控制将应用程序的内容直观地呈现出来。视图用来将内容绘制在指定的矩形区域内,并响应该区域的事件。控制是一类专门的视图,负责实施常见的界面对象。如button、文本栏和切换开关。

视图对象通过应用程序的控制器对象。了解模型数据的更改,并通过控制器对象。将用户发动的改动,传达到应用程序的模型对象

UIKit 框架提供标准的视图,每一个视图对象终于继承自 UIView 类。用于呈现很多类型的内容。通过直接将 UIView(或它的子类)子类化。您还能够定义自己的自定视图。

除了包含视图和控制以外,应用程序还能够将 Core Animation 层并入其视图和控制分层结构中。层对象实际是代表视觉内容的数据对象。

视图在幕后大量使用层对象,来渲染其内容。您还能够将自定的层对象,加入到界面。以实施复杂的动画和其它类型的复杂视觉效果。

UIKit 框架提供的视图组织为视图层次。应用程序所显示的视图,会排列成层次结构(直观上基于包括)。此模式同意应用程序将单个视图和合成视图同等对待。

层次的根部为一个窗体对象;根部下面的每一个视图,都有一个父视图,以及零个或多个子视图。

父视图包括子视图。

视图层次是画图和事件处理的结构性组件。

IOS框架中的模型对象能够由UIKit框架提供的UIDocument对象来实现文档类型的数据模型。还能够依据须要採用框架提供的数据类型定义自己的数据模型及其相关业务逻辑。

IOS应用程序还能够採用Core Data框架来创建和实现模型对象。Core Data 提供了一个基础结构。来管理对模型对象所做的改动。并将模型对象存储到一个文件里,然后再将它们取回来。Core Data框架还提供了很多其他特性:如自己主动支持撤销和重做。以及维持对象之间的相互关系;同意在不论什么给定的时间内,仅将模型对象的子集保存在内存中;使用模式来描写叙述模型对象;同意维护编辑对象的不相交集合;支持数据储存版本号管理和迁移。

版本号管理可让您轻松地将旧版本号的用户文件升级到当前版本号。同意在
iCloud 中储存数据,然后从多个设备訪问数据。

而android 系统没有独立的视图控制器对象,而由应用程序的ACTIVITY组件担当视图控制器角色,用来创建和载入、呈现视图,通过模型适配器Adapter接口载入模型对象提供的数据及更新显示到视图上。

用户在视图上对数据模型的改变也由ACTIVITY负责通过模型适配器接口更新到模型。Adapter担当数据模型和视图之间的中间人角色。

android 系统的窗体对象相应用程序不开放。由框架的窗体管理服务进行管理。

android 系统也是一个应用程序相应一个窗体,相应着系统提供的root view 对象。

视图对象在窗体中进行呈现。

android 系统的每一个视图对象都继承自View类,包括View和ViewGroup 对象。一个应用的ui 由View和ViewGroup 对象组成的视图树构造,View对象用来在屏幕上绘制内容并和用户交互,如按钮buttons 或 text fields等。

ViewGroup 对象 是视图的容器,能够包括其他View和ViewGroup对象,以便实现 界面的布局。

ViewGroup 对象和当中包括的其他View和ViewGroup对象以
视图树的形式加以组织。

android 系统的应用程序ui的可视结构由详细的布局对象layout 来定义,每一个详细的布局对象layout都是一个 ViewGroup 对象 。包含Linear Layout、Relative Layout、Web View等。

组成应用程序界面的由多个子视图组成的视图对象通过担当视图控制器角色的activity组件 的setContentView函数载入进应用进行显示。

android 系统的模型对象的提供主要由Content providers来提供,并通过activity提供的一个模型适配器Adapter对象提供给视图。

版权全部,转载时请显要处注明链接,谢谢!

IOS 与ANDROID框架及应用开发模式对照一的更多相关文章

  1. IOS 与ANDROID框架及应用开发模式对比一

    IOS 和ANDROID操作系统都是目前流行的移动操作系统,被移动终端和智能设备大量采用,两者都采用了先进的软件技术进行设计,为了方便应用开发两者都采用了先进的设计模式.两者在框架设计上都采用了什么技 ...

  2. Android应用中MVP开发模式

    所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事 ...

  3. Android 框架修炼-自己开发高效异步图片加载框架

    一.概述 目前为止,第三方的图片加载框架挺多的,比如UIL , Volley Imageloader等等.但是最好能知道实现原理,所以下面就来看看设计并开发一个加载网络.本地的图片框架. 总所周知,图 ...

  4. 【Android - 框架】之MVP模式的使用

    提起MVP架构模式,大家可能首先想到的是它的"前辈"MVC模式.MVC由Model.View.Controller组成,请求从Controller进入后进行业务判断,然后交给Mod ...

  5. Android 必须知道2018年流行的框架库及开发语言,看这一篇就够了!

    导语 2017 已经悄悄的走了,2018 也已经匆匆的来了,我们在总结过去的同时,也要展望一下未来,来规划一下今年要学哪些新技术.这几年优秀Android的开源库不断推出,新技术层出不穷,需要我们不断 ...

  6. 《React Native 精解与实战》书籍连载「配置 iOS 与 Android 开发环境」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  7. UI开发模式对比:JSP、Android、Flex

    前一篇文章分析了Java平台下不同类型WEB框架对开发模式的影响,多数Java领域的WEB框架都是聚焦于服务端MVC的实现,这些框架对View的支持,通常是基于标准的JSP或类似JSP的模板技术如Fr ...

  8. App原生、混合、纯WEB开发模式的优劣分析

    什么叫做原生App? 什么是混合app? 什么是Web App开发? Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统 ...

  9. 《React Native 精解与实战》书籍连载「iOS 平台与 React Native 混合开发」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

随机推荐

  1. JavaScript 进阶(四)解密闭包closure

    闭包(closure)是什么东西 我面试前端基本都会问一个问题"请描述一下闭包".相当多的应聘者的反应都是断断续续的词,“子函数”“父函数”“变量”,支支吾吾的说不清楚.我提示说如 ...

  2. php语言基础学习笔记

    花了一个小时复习了一下很多年没有碰了的php,mark一下,高二时学的. 1. 代码嵌在<?php  ?>内 2.输出函数echo,相当于js中的document.write 3.可以在打 ...

  3. 52. 模版和设计元素——Lotus Notes的代码重用

    不论是理论上还是实用上,代码重用都是编程的一个重要议题.可以从两个角度来讨论代码重用. 一是逻辑上代码以怎样的方式被重用.既可以通过面向对象的思想普及以来耳熟能详的继承的方式.比如先建了一个车的基类, ...

  4. 在命令行获取标准输入序列的反互序列,pep序列和长度信息

    近期对序列文件处理的比較多,时常要看一些核酸序列的反向互补序列,长度.可能的翻译序列. 曾经我常用seqBuider 来查看.假设能在命令行直接查看.想必是极好的. 这是一个perl脚本.只是我把它的 ...

  5. ios-王云鹤 调用ios系统功能---------------打电话、发短信、发邮件

    --------------------------------------菜鸟总结,欢迎读者雅正------------------------------------------------- 先 ...

  6. Linux账号管理(一)

    整理自<鸟哥的Linux私房菜>,整理者:华科小涛http://www.cnblogs.com/hust-ghtao/ 管理员的工作中,相当重要的一环就是“管理账号”.因为整个系统都是你在 ...

  7. Problem D: Flip Five

    大致题意:3 * 3的黑白格,在翻转的时候会本身和四周的都翻转,问最小翻转几次变成全部是白色解题思路:把3 * 3 = 9 个格子进行全排列,然后穷举然后找翻转的最小次数 #include <i ...

  8. OSGi 学习之路(4) - osgi的模块化 java在模块化的局限性

    底层代码可见性控制 Java提供了private,public,protected和package private(无修饰符)这四种访问控制级别,不过这仅仅提供了底层的OO数据封装特性.包这个概念确实 ...

  9. CPU 球迷助威清理灰尘图形的全过程

    主机因为使用时间长的电源风扇,风扇轴承石油枯竭,导致拒绝或不转的风扇转速,热量使电源不能得到有效排除,往往会造成电脑死机,有几种方法来解决. 单省钱的办法例如以下: 1.把电源从主机上拆下,例如以下图 ...

  10. 用ATL开发和部署ActiveX网页控件

    用ATL开发和部署ActiveX网页控件 摘 要 ActiveX插件技术广泛的运用于B/S系统中,本文通过一个项目实例,详细介绍用ATL开发和部署ActiveX网页控件的过程.学习使用ActiveX让 ...