IOS 与ANDROID框架及应用开发模式对照一[通俗易懂]

IOS 与ANDROID框架及应用开发模式对照一

大家好,又见面了,我是全栈君。

           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对象提供给视图。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116533.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一般人都不知道的功能强大的超级搜索引擎!!!!「建议收藏」

    一般人都不知道的功能强大的超级搜索引擎!!!!「建议收藏」百度的中文搜索非常的好。Google的搜索引擎支持非常多种语言。速度也非常快,据说有8000多台server来支撑搜索。可是有时候域名解析不是特别的稳定。并且我们发现用同一个keyword在不同的搜索

  • 参加微软Ignite大会有感

    参加微软Ignite大会有感

    2021年11月26日
  • 解决Tomcat启动后404的问题

    概述当我遇到这个问题的时候,我真是操**的崩溃了,你懂我意思吧,就是那种各种百度也找不到答案,然后有好多回答都是帮我解释什么叫”404”????Excuseme???????我用你解释吗???我觉的真挺逗的,还有一大堆说程序有问题的,就是这个说法啊不能排除,确实有的开发人员给运维的war包就是有问题的,不过在我这儿跟包没关系,纯粹就是自己的问题,所以运维人员如果查到网上说让你去怪开…

  • Landsat 9 数据详细介绍

    Landsat 9 数据详细介绍1.基本情况Landsat9号是Landsat系列中最新的一颗卫星,计划于2020年12月在加利福利亚范登堡空军基地加利福尼亚由AtlasV401火箭搭载进行发射,实际于于2021年9月27日发射,并已经开始采集第一批数据,2021年10月31日获取到遥感数据。Landsat9是继续Landsat系列对地球表面观测不可替代的记录。为了减少建造时间和观测缺口的风险,Landsat9在很大程度上复制了它的前身Landsat8。来源:原文链接…

  • 【Redis】五种数据类型及其使用场景

    Redis数据类型五种类型与类比java的模型string–>Stringhash–>Hashmaplist–>LinkListset–>HashSetsorted_set–>TreeSetString类型redis数据存储格式redis自身是一个Map类型的存储方式,其中所有的数据都是采用key:value的形式存储我们讨论的数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串St

  • 机器学习网格搜索寻找最优参数[通俗易懂]

    机器学习网格搜索寻找最优参数[通俗易懂]整理一下前阶段复习的关于网格搜索的知识:程序及数据请到github上下载GridSearch练习网格搜索是将训练集训练的一堆模型中,选取超参数的所有值(或者代表性的几个值),将这些选取的参数及值全部列出一个表格,并分别将其进行模拟,选出最优模型。上面是数据集的可视化分布图,具体代码如下:%matplotlibinlineimportpandasaspdimpo…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号