IOS 整体架构 和 MVC布局

IOS的生态系统

IOS生态系统不仅仅是指产品,更重要的是指 iPhone/iPad/iPod/Mac +iCloud+App整个系统,包括Siri (部分设备不支持)、FaceTime、Safari、Game Center、 地图、Passbook、电话、邮件。苹果所有移动设备都使用自己的OS,且不能更换电池,不能插内存卡,数据线连电脑后只能通过自家软件iTunes进行文件的传输,只能使用经过苹果认可的软件,且软件也只能从App Store下载,这就组成了 一个封闭的生态圈。

看一组数据:

2012年用户在App Store的消费总额45亿美元左右

2013年用户在App Store的消费总额超过100亿美元

2014年Q1国内IOS游戏市场已突破12亿的季度收入

2014年 Q1: 苹果App Store应用下载量比Google Play 低45%,然而收入超过后者85%,App Store中国区收入比上季度增长70%。 

IOS架构

iOS自下至上可以分为四层:Core OS,Core Services,Media,Cocoa Touch。

Core OS

是用FreeBSD和Mach所改写的Darwin, 是开源、符合POSIX标准的一个Unix核心。这一层提供了整个iPhone OS的一些基础功能,比如:硬件驱动, 内存管理,程序管理,线程管理(POSIX),文件系统,网络(BSD Socket),以及标准输入输出等等,所有这些功能都会通过C语言的API来提供。另外,值得一题的是,这一层最具有UNIX色彩,如果你需要把 UNIX上所开发的程序移植到iPhone上,多半都会使用到Core OS的API。核心OS层的驱动也提供了硬件和系统框架之间的接口。然而,由于安全的考虑,只有有限的系统框架类能访问内核和驱动。iPhone OS提供了许多访问操作系统低层功能的接口集,iPhone 应用通过LibSystem库来访问这些功能,这些接口集如下所示:

  • 线程(POSIX线程);
  • 网络(BSD sockets);
  • 文件系统访问;
  • 标准I/O;
  • Bonjour和DNS服务;
  • 现场信息(Locale Information);
  • 内存分配;
  • 数学计算。

许多Core OS技术的头文件位于目录<iPhoneSDK>/usr/include/,iPhoneSDK是SDK的安装目录。

 

Core Services

在Core OS基础上提供了更为丰富的功能, 它包含了Foundation.Framework和Core Foundation.Framework, 之所以叫Foundation ,就是因为它提供了一系列处理字串,排列,组合,日历,时间等等的基本功能。Foundation是属于Objective-C的API,Core Fundation是属于C的API。另外Core servieces还提供了其他的功能,比如:Security, Core Location, SQLite, 和Address Book. 其中Security是用来处理认证,密码管理,按安全性管理的; Core Location是用来处理GPS定位的;SQLLite是轻量级的数据库,而AddressBook则用来处理电话薄资料的。下面是具体介绍:

(1)电话本框架(AddressBook.framework)

提供了保存在手机设备中的电话本编程接口。开发者能使用该框架访问和修改存储在用户联系人数据库里的记录。

例如,一个聊天程序可以使用该框架获得可能的联系人列表,启动聊天的进程(Process),并在视图上显示这些联系人信息等。

 

(2)核心基础框架(CoreFoundation.framework)

是基于C语言的接口集,提供iPhone应用的基本数据管理和服务功能。该框架 支持如下功能:

  •  Collection数据类型(Arrays、 Sets等);
  •  Bundles;
  •  字符串管理;
  •  日期和时间管理;
  •  原始数据块管理;
  •  首选项管理;
  •  URL和Stream操作;
  •  线程和运行循环(Run Loops);
  •  端口和Socket通信。

核心基础框架与基础框架是紧密相关的,它们为相同的基本功能提供了Objective-C接口。如果开发者混合使用Foundation Objects 和Core Foundation类型,就能充分利用存在两个框架中的"toll-free bridging"。

toll-free bridging意味着开发者能使用这两个框架中的任何一个的核心基础和基础类型,例如Collection和字符串类型等。每个框架中的类和数据类型的描述注明该对象是否支持toll-free bridged。如果是,它与哪个对象桥接(toll-free bridged)。

 

(3)CFNetwork框架(CFNetwork.framework)

是一组高性能的C语言接口集,提供网络协议的面向对象的抽象。开发者可以使用 CFNetwork框架操作协议栈,并且可以访问低层的结构如BSD Sockets等。同时,开发者也能简化与FTP和HTTP服务器的通信,或解析DNS等任务。使用CFNetwork框架实现的任务如下所示:

  • BSD Sockets;
  • 利用SSL或TLS创建加密连接;
  • 解析DNS Hosts;
  • 解析HTTP协议,鉴别HTTP和HTTPS服务器;
  • 在FTP服务器工作;
  • 发布、解析和浏览Bonjour服务。

 

(4)核心位置框架(Core Location Framework)

主要获得手机设备当前的经纬度,核心位置框架利用附近的GPS、蜂窝基站或Wi- Fi信号信息测量用户的当前位置。iPhone地图应用使用这个功能在地图上显示用户的当前位置。开发者能融合这个技术到自己的应用中,给用户提供一些位置信息服务。

例如可以提供一个服务:基于用户的当前位置,查找附近的餐馆、商店或设备等。

 

(5)安全框架(Security Framework)

iPhone OS除了内置的安全特性外,还提供了外部安全框架,从而确保应用数据的安全性。该框架提供了管理证书、公钥/私钥对和信任策略等的接口。它支持产生加密安全的伪随机数,也支持保存在密钥链的证书和密钥。对于用户敏感的数据,它是安全的知识库(Secure Repository)。CommonCrypto接口也支持对称加密、HMAC和数据摘要。在iPhone OS里没有OpenSSL库,但是数据摘要提供的功能在本质上与OpenSSL库提供的功能是一致的。

 

(6)SQLite

开发者可以创建本地数据库文件,并管理这些文件中的表格和记录。数据库SQLite为通用的目的而设计,但仍可以优化为快速访问数据库记录。访问数据库SQLite的头文件位于<iPhoneSDK>/usr/include/sqlite3.h,其中<iPhoneSDK>是SDK安装的目标路径。

 

(7)支持XML

基础框架提供NSXMLParser类,解析XML文档元素。libXML2库提供操作XML内容的功能,这个开放源代码的库可以快速解析和编辑 XML数据,并且转换XML内容到HTML。访问libXML2库的头文件位于目录<iPhoneSDK>/usr/include /libxml2/,其中<iPhoneSDK>是SDK安装的目标目录。

 

Media层

提供了图片,音乐,影片等多媒体功能。图像分为2D图像和3D图像, 前者由Quartz2D来支持,后者则是用OpenglES.与音乐对应的模组是Core Audio和OpenAL, Media Player 实现了影片的播放,而最后还提供了Core Animation来对强大动画的支持。具体介绍如下:

(1)图像技术(Graphics Technologies)

高质量图像是所有iPhone应用的一个重要的组成部分。任何时候,开发者可以采用UIKit 框架中已有的视图和功能以及预定义的图像来开发iPhone应用。然而,当UIKit 框架中的视图和功能不能满足需求时,开发者可以应用下面描述的技术和方法来制作视图。

     ① Quartz核心图像框架(CoreGraphics.framework)

包含了Quartz 2D画图API,Quartz与在Mac OS中采用的矢量图画引擎是一样先进的。Quartz支持基于路径(Path-based)画图、抗混淆(Anti-aliased)重载、梯度 (Gradients)、图像(Images)、颜色(Colors)、坐标空间转换(Coordinate-space Transformations)、pdf文档创建、显示和解析。虽然API是基于C语言的,它采用基于对象的抽象表征基础画图对象,使得图像内容易于保存和复用。

     ② 核心动画(Core Animation)

Quartz核心框架(QuartzCore.framework)包含CoreAnimation接口,Core Animation是一种高级动画和合成技术,它用优化的重载路径(Rendering Path)实现复杂的动画和虚拟效果。它用一种高层的Objective-C接口配置动画和效果,然后重载在硬件上获得较好的性能。Core Animation集成到iPhone OS 的许多部分,包括UIKit类如UIView,提供许多标准系统行为的动画。开发者也能利用这个框架中的Objective-C接口创建客户化的动画。

     ③ OpenGL ES

OpenGL ES框架(OpenGLES.framework)符合OpenGL ES v1.1规范,它提供了一种绘画2D和3D内容的工具。OpenGL ES 框架是基于C语言的框架,与硬件设备紧密相关,为全屏游戏类应用提供高帧率(high frame rates)。开发者总是要使用OpenGL框架的EAGL接口,EAGL接口是OpenGL ES框架的一部分,它提供了应用的OpenGL ES画图代码和本地窗口对象的接口。

(2)音频技术(Audio Technologies)

iPhone OS的音频技术为用户提供了丰富的音频体验。它包括音频回放,高质量的录音和触发设备的振动功能等。iPhone OS的音频技术支持如下音频格式:AAC、Apple Lossless(ALAC)、A-law、IMA/ADPCM(IMA4)、Linear PCM、μ-law和Core Audio等。

    ① 核心音频(Core Audio Family)

核心音频框架家族(Core Audio family of frameworks)提供了音频的本地支持,如表16-1所示。Core Audio是一个基于C语言的接口,并支持立体声(Stereo Audio)。开发能采用iPhone OS 的Core Audio框架在iPhone 应用中产生、录制、混合和播放音频。开发者也能通过核心音频访问手机设备的振动功能。核心音频框架:


框架(Framework)


服务(Service)


CoreAudio.framework


定义核心音频的音频数据类型


AudioUnit.framework


提供音频和流媒体文件的

回放和录制,并且管理音

频文件和播放提示声音


AudioToolbox.framework


提供使用内置音频单元服务,

音频处理模块

    ② OpenAL

iPhone OS 也支持开放音频库(Open Audio Library, OpenAL)。OpenAL是一个跨平台的标准,它能传递位置音频(Positional Audio)。开发者能应用OpenAL在需要位置音频输出的游戏或其他应用中实现高性能、高质量的音频。由于OpenAL是一个跨平台的标准,采用OpenAL的代码模块可以平滑地移植到其他平台。

(3)视频技术(Video Technologies)

iPhone OS通过媒体播放框架(MediaPlayer.framework)支持全屏视频回放。媒体播放框架支持的视频文件格式包括.mov, .mp4,.m4v和.3gp,并应用如下压缩标准:

    ① H.264 Baseline Profile Level 3.0 video,在30 f/s 的情况下分辨率达到640×480像素。注意:不支持B frames;

    ② MPEG4规范的视频部分;

    ③ 众多的音频格式,包含在音频技术的列表里,如AAC、Apple Lossless (ALAC)、A-law、IMA/ADPCM(IMA4)、线性PCM、μ-law和Core Audio等。      

 

Cocoa Touch

是Objective-C的API, 其中最核心的部分是UIKit.Framework,应用程序界面上的各种组件,全是由它来提供呈现的,除此之外它还负责处理屏幕上的多点触摸事件,文字的输出,图片,网页的显示,相机或文件的存取,以及加速感应的部分等。具体介绍如下:

(1)UIKit框架(UIKit.framework)

包含Objective-C程序接口,提供实现图形,事件驱动的iPhone应用的关键架构。 iPhone OS中的每一个应用采用这个框架实现如下核心功能:

  • 应用管理;
  • 支持图形和窗口;
  • 支持触摸事件处理;
  • 用户接口管理;
  • 提供用来表征标准系统视图和控件的对象;
  • 支持文本和Web内容;
  • 通过URL scheme与其他应用的集成。

为提供基础性代码建立应用,UIKit也支持一些与设备相关的特殊功能,如下所示:

  • 加速计数据;
  • 内建Camera;
  • 用户图片库;
  • 设备名称和模式信息。

 

(2)基础框架(Foundation Framework)

支持如下功能:

  •  Collection数据类型(包括Arrays、Sets);
  •  Bundles;
  •  字符串管理;
  •  日期和时间管理;
  •  原始数据块管理;
  •  首选项管理;
  •  线程和循环;
  •  URL和Stream处理;
  •  Bonjour;
  •  通信端口管理;
  •  国际化。

 

(3)电话本UI框架(Address Book UI Framework)

是一个Objective-C标准程序接口,主要用来创建新联系人,编辑和选择 电话本中存在的联系人。它简化了在iPhone应用中显示联系人信息,并确保所有应用使用相同的程序接口,保证应用在不同平台的一致性。

 

总结:

尽可能使用高层框架,当我们要开发iPhone程序的时候,首先要现从上层入手,优先使用Objective-C封装后的库。

也就是通过 UIKit.framework搭配Foundation.framework来进行开发,而当面对一些比较复杂的功能时,像是多媒体的处理或是绘图,再往下层去找寻相关的framwork开完成。

 

MVC 布局

其实在 PHP,包括 java(Struts+Hibernate/Mybatis+Spring)等都有涉及,很常见的一种模式。回忆整理下:

 

目的:

将人机交互从核心功能中分离出来,模型model对用户来说是不可见的,用户只需要观察视图view,用户与模型的交互通过控制器controller提供的安全方法来实现 。

MVC(Model-View-Controller)将一个交互式应用程序分成3个组件

模型:包含核心功能和数据 (核心业务逻辑)

视图:向用户显示信息

控制器:处理用户输入

 

变更-传播机制保证了模型和用户界面之间的一致性 

一个模型可对应多个视图,如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化。一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化,一起维护数据的一致性 。

 

模型 model

封装了内核功能和数据,模型对于用户来说是不可见的(M与V独立),模型独立于特定输出表示或者输入方式(M与C独立) ,用户只能通过控制器操作模型(C是M与V之间的桥梁) 

 

视图 view

向用户显示信息,不同的视图使用不同的方法呈现信息,

  • 每个视图组件都有一个更新函数,这个函数被模型变更通知激活,

     

  • 被激活(此时模型已经改变)后, 将使得视图重新和模型一致。

     

  • 在初始化阶段,视图向模型登记请求变更通知(表),

     

  • 从模型获得数据

     

  • 通过状态查询函数实现。

例如:定时刷新

 

控制器 controller

每个视图有一个相关的控制器组件(一一对应),控制器组件接受事件,并翻译成输入,事件如何发送到控制器由用户界面平台决定,事件被翻译成为对模型或者视图的请求,如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知。

例如:用户点击按钮,按钮的事件响应函数将采取相应的措施处理用户要求,用户仅仅通过控制器与系统交互 

 

注意:多个 MVC 可以协同一起工作

 

辛苦的劳动,转载请注明出处,谢谢……

http://www.cnblogs.com/kubixuesheng/p/4164051.html

时间: 2024-10-10 13:58:03

IOS 整体架构 和 MVC布局的相关文章

thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】

本文讲述了thinkPHP5.0框架整体架构.分享给大家供大家参考,具体如下: ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织. MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V).控制器(C),它们各自处理自己的任务. 5.0的URL访问受路由决定,如果关闭路由或者没有匹配路由的情况下,则是基于: http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作

Spring源码整体架构

前言 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. 从这篇文章开始,我讲开始阅读并介绍 Spring 源码的设计思想,希望能改对 Spring 框架有一个初步的全面的认识,并且学习其架构设计方面的一些理念和方法. Spring 源码地址:https://github.com/spring-projects/spring-framework 概述 Sprin

《Spring技术内幕》——1.3节Spring的整体架构

1.3 Spring的整体架构 了解了Spring的设计理念之后,我们继续介绍Spring的整体架构.在Spring中,我们大致按照一个参考关系,将其划分为几个层次,比如IoC容器.AOP核心模块.封装的Java EE服务.作为中间的驱动组件.其他作为上层的应用,这些应用不但包括来源于社区的应用封装,如ACEGI,也包括使用Spring作为平台开发出来的各种类型的企业应用. 从技术上看,Spring是封装得很清晰的一个分层架构,可以参考如图1-4所示的Spring架构图. 在这个架构图中,我们可

深入理解bootstrap框架之第二章整体架构_jquery

一. 整体架构 1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQuery bootstrap插件的基础 4.响应式设计 兼容多个终端.这是bootstrap的终极理念. 5.css插件 提供丰富的样式. 6.js插件 二. 栅格系统 1.基本实现过程 定义容器的大小--跳转边距--媒询 有以下要求: (1)一行(row)数据必须包含在.container中. .cont

腾讯OMG架构因为其布局媒体全产业链战略而发生了调整

摘要: 根据官方公告,腾讯OMG架构因为其布局媒体全产业链战略而发生了调整: 继续加大对视频产业的投入,在原基础上组建版权合作.平台运营.产品技术以及客厅业务四个部门. 腾讯微 根据官方公告,腾讯OMG架构因为其"布局媒体全产业链"战略而发生了调整: 继续加大对视频产业的投入,在原基础上组建版权合作.平台运营.产品技术以及客厅业务四个部门. 腾讯微博产品运营团队与新闻团队整合,腾讯官方的说法是为了强化整体社交资讯服务功能.不过也有内部人士透露,微博产品已经被战略放弃,日后不再有功能更新

OkHttp 3.7源码分析(一)——整体架构

OkHttp3.7源码分析文章列表如下: OkHttp源码分析--整体架构 OkHttp源码分析--拦截器 OkHttp源码分析--任务队列 OkHttp源码分析--缓存策略 OkHttp源码分析--多路复用 OkHttp是一个处理网络请求的开源项目,是Android端最火热的轻量级框架,由移动支付Square公司贡献用于替代HttpUrlConnection和Apache HttpClient.随着OkHttp的不断成熟,越来越多的Android开发者使用OkHttp作为网络框架. 之所以可以

IOS应用架构思考二(网络图片库)

移动端架构中图片库是非常重要的一环,其实图片库也可以理解为网络库的一种特殊使用模式,为了满足需要,图片库至少要满足以下特点: 提供一个加载入口,通常以UIImageView的类别方法setImageWithURL:...开始 支持异步网络加载图片 支持内存缓存和文件缓存 确保同一张图片不会被重复下载 主流图片格式的解码 著名的优秀关于图片加载的库有: SDWebImage AFNetworking EGOImageLoading 已经年久失修 1. Load入口 关于Load入口方式,一般有两种

【深入浅出jQuery】源码浅析--整体架构

最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹. 另外,阅读源码让我接触到了大量底层的知识.对原生JS .框架设计.代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章. 网上已经有很多解读 jQuery 源码的文章了,作为系列开篇的第一篇,思前想去

Spark技术内幕:Storage 模块整体架构

Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的.用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.RDD#cache将数据持久化:持久化的动作都是由Storage模块完成的.包括Shuffle过程中的数据,也都是由Storage模块管理的.可以说,RDD实现了用户的逻辑,而Storage则管理了用户的数据.本章将讲解Storage模块的实现. 1.1     模块整体架构 org.apache.s