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. [LeetCode][Java] 3Sum Closest

    题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  2. KMP原理、分析及C语言实现

    (是在matrix67博客基础上整理而来,整理着:华科小涛@http://www.cnblogs.com/hust-ghtao/) 有些算法可以让人发疯,KMP算法就是一个.在网上找了很多资料讲的都让 ...

  3. 微信支付[v3]

    原文:微信支付[v3] V2升级V3 顺便记录一下 ,文档: http://pay.weixin.qq.com/wiki/doc/api/index.html !!! 支付授权目录与测试人的微信帐号白 ...

  4. OCA读书笔记(2) - 安装Oracle软件

    Objectives: •Describe your role as a database administrator (DBA) and explain typical tasks and tool ...

  5. boost锁的概述

    ●     boost锁的概述 boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁. ▲     mutex对象类 mutex类主要有两种:boost::mutex,b ...

  6. Ppoj 1014 深搜

    这个题题意是给你价值1-6的珠宝个数输出能否平分为两份(如果平分为三分就不知道怎么做了……) 主要是用回溯DFS,但是要剪枝,对200取模……!!(很重要……) 代码…… #include <i ...

  7. 一些关于linux 下的jni下问题

    编译的细节我就不写了,主要写一些linux下的注意事项,mask一下错误(太多windows的例子了) 编译教程:http://www.cnblogs.com/youxilua/archive/201 ...

  8. Oracle SQL语句执行过程

    前言 QQ群讨论的时候有人遇到这样的问题:where子句中无法访问Oracle自定义的字段别名.这篇 博客就是就这一问题做一个探讨,并发散下思维,谈谈SQL语句的执行顺序问题. 问题呈现 直接给出SQ ...

  9. Xamarin相关学习预估

    以前没有开发过app也没有了解过,当然只是用过,现在迫于形势无奈活到老学到老. 初步想了下app相关开发所涉及的知识点 一  app相关资源监视 1.1 网络监视器:https://github.co ...

  10. 重复数据删除(De-duplication)技术研究(SourceForge上发布dedup util)

    dedup util是一款开源的轻量级文件打包工具,它基于块级的重复数据删除技术,可以有效缩减数据容量,节省用户存储空间.目前已经在Sourceforge上创建项目,并且源码正在不断更新中.该工具生成 ...