IOS的生態(tài)系統(tǒng)
IOS生態(tài)系統(tǒng)不僅僅是指產(chǎn)品,更重要的是指 iphone/iPad/iPod/Mac +iCloud+App整個系統(tǒng),包括Siri (部分設(shè)備不支持)、FaceTime、Safari、Game Center、 地圖、Passbook、電話、郵件。蘋果所有移動設(shè)備都使用自己的OS,且不能更換電池,不能插內(nèi)存卡,數(shù)據(jù)線連電腦后只能通過自家軟件iTunes進行文件的傳輸,只能使用經(jīng)過蘋果認可的軟件,且軟件也只能從App Store下載,這就組成了 一個封閉的生態(tài)圈。
看一組數(shù)據(jù):
2012年用戶在App Store的消費總額45億美元左右
2013年用戶在App Store的消費總額超過100億美元
2014年Q1國內(nèi)IOS游戲市場已突破12億的季度收入
2014年 Q1: 蘋果App Store應(yīng)用下載量比Google Play 低45%,然而收入超過后者85%,App Store中國區(qū)收入比上季度增長70%。
IOS架構(gòu)
iOS自下至上可以分為四層:Core OS,Core Services,Media,Cocoa Touch。
Core OS
是用FreeBSD和Mach所改寫的Darwin, 是開源、符合POSIX標準的一個Unix核心。這一層提供了整個iPhone OS的一些基礎(chǔ)功能,比如:硬件驅(qū)動, 內(nèi)存管理,程序管理,線程管理(POSIX),文件系統(tǒng),網(wǎng)絡(luò)(BSD Socket),以及標準輸入輸出等等,所有這些功能都會通過C語言的API來提供。另外,值得一題的是,這一層最具有UNIX色彩,如果你需要把 UNIX上所開發(fā)的程序移植到iPhone上,多半都會使用到Core OS的API。核心OS層的驅(qū)動也提供了硬件和系統(tǒng)框架之間的接口。然而,由于安全的考慮,只有有限的系統(tǒng)框架類能訪問內(nèi)核和驅(qū)動。iPhone OS提供了許多訪問操作系統(tǒng)低層功能的接口集,iPhone 應(yīng)用通過LibSystem庫來訪問這些功能,這些接口集如下所示:
Core Services
在Core OS基礎(chǔ)上提供了更為豐富的功能, 它包含了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是輕量級的數(shù)據(jù)庫,而AddressBook則用來處理電話薄資料的。下面是具體介紹:
(1)電話本框架(AddressBook.framework)
提供了保存在手機設(shè)備中的電話本編程接口。開發(fā)者能使用該框架訪問和修改存儲在用戶聯(lián)系人數(shù)據(jù)庫里的記錄。
例如,一個聊天程序可以使用該框架獲得可能的聯(lián)系人列表,啟動聊天的進程(PRocess),并在視圖上顯示這些聯(lián)系人信息等。
(2)核心基礎(chǔ)框架(CoreFoundation.framework)
是基于C語言的接口集,提供iPhone應(yīng)用的基本數(shù)據(jù)管理和服務(wù)功能。該框架 支持如下功能:
核心基礎(chǔ)框架與基礎(chǔ)框架是緊密相關(guān)的,它們?yōu)橄嗤幕竟δ芴峁┝薕bjective-C接口。如果開發(fā)者混合使用Foundation Objects 和Core Foundation類型,就能充分利用存在兩個框架中的"toll-free bridging"。
toll-free bridging意味著開發(fā)者能使用這兩個框架中的任何一個的核心基礎(chǔ)和基礎(chǔ)類型,例如Collection和字符串類型等。每個框架中的類和數(shù)據(jù)類型的描述注明該對象是否支持toll-free bridged。如果是,它與哪個對象橋接(toll-free bridged)。
(3)CFNetwork框架(CFNetwork.framework)
是一組高性能的C語言接口集,提供網(wǎng)絡(luò)協(xié)議的面向?qū)ο蟮某橄?。開發(fā)者可以使用 CFNetwork框架操作協(xié)議棧,并且可以訪問低層的結(jié)構(gòu)如BSD Sockets等。同時,開發(fā)者也能簡化與FTP和HTTP服務(wù)器的通信,或解析DNS等任務(wù)。使用CFNetwork框架實現(xiàn)的任務(wù)如下所示:
(4)核心位置框架(Core Location Framework)
主要獲得手機設(shè)備當前的經(jīng)緯度,核心位置框架利用附近的GPS、蜂窩基站或Wi- Fi信號信息測量用戶的當前位置。iPhone地圖應(yīng)用使用這個功能在地圖上顯示用戶的當前位置。開發(fā)者能融合這個技術(shù)到自己的應(yīng)用中,給用戶提供一些位置信息服務(wù)。
例如可以提供一個服務(wù):基于用戶的當前位置,查找附近的餐館、商店或設(shè)備等。
(5)安全框架(Security Framework)
iPhone OS除了內(nèi)置的安全特性外,還提供了外部安全框架,從而確保應(yīng)用數(shù)據(jù)的安全性。該框架提供了管理證書、公鑰/私鑰對和信任策略等的接口。它支持產(chǎn)生加密安全的偽隨機數(shù),也支持保存在密鑰鏈的證書和密鑰。對于用戶敏感的數(shù)據(jù),它是安全的知識庫(Secure Repository)。CommonCrypto接口也支持對稱加密、HMAC和數(shù)據(jù)摘要。在iPhone OS里沒有OpenSSL庫,但是數(shù)據(jù)摘要提供的功能在本質(zhì)上與OpenSSL庫提供的功能是一致的。
(6)SQLite
開發(fā)者可以創(chuàng)建本地數(shù)據(jù)庫文件,并管理這些文件中的表格和記錄。數(shù)據(jù)庫SQLite為通用的目的而設(shè)計,但仍可以優(yōu)化為快速訪問數(shù)據(jù)庫記錄。訪問數(shù)據(jù)庫SQLite的頭文件位于<iPhoneSDK>/usr/include/sqlite3.h,其中<iPhoneSDK>是SDK安裝的目標路徑。
(7)支持xml
基礎(chǔ)框架提供NSXMLParser類,解析XML文檔元素。libXML2庫提供操作XML內(nèi)容的功能,這個開放源代碼的庫可以快速解析和編輯 XML數(shù)據(jù),并且轉(zhuǎn)換XML內(nèi)容到HTML。訪問libXML2庫的頭文件位于目錄<iPhoneSDK>/usr/include /libxml2/,其中<iPhoneSDK>是SDK安裝的目標目錄。
Media層
提供了圖片,音樂,影片等多媒體功能。圖像分為2D圖像和3D圖像, 前者由Quartz2D來支持,后者則是用OpenglES.與音樂對應(yīng)的模組是Core Audio和OpenAL, Media Player 實現(xiàn)了影片的播放,而最后還提供了Core Animation來對強大動畫的支持。具體介紹如下:
(1)圖像技術(shù)(Graphics Technologies)
高質(zhì)量圖像是所有iPhone應(yīng)用的一個重要的組成部分。任何時候,開發(fā)者可以采用UIKit 框架中已有的視圖和功能以及預定義的圖像來開發(fā)iPhone應(yīng)用。然而,當UIKit 框架中的視圖和功能不能滿足需求時,開發(fā)者可以應(yīng)用下面描述的技術(shù)和方法來制作視圖。
① Quartz核心圖像框架(CoreGraphics.framework)
包含了Quartz 2D畫圖API,Quartz與在Mac OS中采用的矢量圖畫引擎是一樣先進的。Quartz支持基于路徑(Path-based)畫圖、抗混淆(Anti-aliased)重載、梯度 (Gradients)、圖像(Images)、顏色(Colors)、坐標空間轉(zhuǎn)換(Coordinate-space Transformations)、pdf文檔創(chuàng)建、顯示和解析。雖然API是基于C語言的,它采用基于對象的抽象表征基礎(chǔ)畫圖對象,使得圖像內(nèi)容易于保存和復用。
② 核心動畫(Core Animation)
Quartz核心框架(QuartzCore.framework)包含CoreAnimation接口,Core Animation是一種高級動畫和合成技術(shù),它用優(yōu)化的重載路徑(Rendering Path)實現(xiàn)復雜的動畫和虛擬效果。它用一種高層的Objective-C接口配置動畫和效果,然后重載在硬件上獲得較好的性能。Core Animation集成到iPhone OS 的許多部分,包括UIKit類如UIView,提供許多標準系統(tǒng)行為的動畫。開發(fā)者也能利用這個框架中的Objective-C接口創(chuàng)建客戶化的動畫。
③ OpenGL ES
OpenGL ES框架(OpenGLES.framework)符合OpenGL ES v1.1規(guī)范,它提供了一種繪畫2D和3D內(nèi)容的工具。OpenGL ES 框架是基于C語言的框架,與硬件設(shè)備緊密相關(guān),為全屏游戲類應(yīng)用提供高幀率(high frame rates)。開發(fā)者總是要使用OpenGL框架的EAGL接口,EAGL接口是OpenGL ES框架的一部分,它提供了應(yīng)用的OpenGL ES畫圖代碼和本地窗口對象的接口。
(2)音頻技術(shù)(Audio Technologies)
iPhone OS的音頻技術(shù)為用戶提供了豐富的音頻體驗。它包括音頻回放,高質(zhì)量的錄音和觸發(fā)設(shè)備的振動功能等。iPhone OS的音頻技術(shù)支持如下音頻格式: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)。開發(fā)能采用iPhone OS 的Core Audio框架在iPhone 應(yīng)用中產(chǎn)生、錄制、混合和播放音頻。開發(fā)者也能通過核心音頻訪問手機設(shè)備的振動功能。核心音頻框架:
框架(Framework) | 服務(wù)(Service) |
CoreAudio.framework | 定義核心音頻的音頻數(shù)據(jù)類型 |
AudioUnit.framework | 提供音頻和流媒體文件的 回放和錄制,并且管理音 頻文件和播放提示聲音 |
AudioToolbox.framework | 提供使用內(nèi)置音頻單元服務(wù), 音頻處理模塊 |
② OpenAL
iPhone OS 也支持開放音頻庫(Open Audio Library, OpenAL)。OpenAL是一個跨平臺的標準,它能傳遞位置音頻(Positional Audio)。開發(fā)者能應(yīng)用OpenAL在需要位置音頻輸出的游戲或其他應(yīng)用中實現(xiàn)高性能、高質(zhì)量的音頻。由于OpenAL是一個跨平臺的標準,采用OpenAL的代碼模塊可以平滑地移植到其他平臺。
(3)視頻技術(shù)(Video Technologies)
iPhone OS通過媒體播放框架(MediaPlayer.framework)支持全屏視頻回放。媒體播放框架支持的視頻文件格式包括.mov, .mp4,.m4v和.3gp,并應(yīng)用如下壓縮標準:
① H.264 Baseline Profile Level 3.0 video,在30 f/s 的情況下分辨率達到640×480像素。注意:不支持B frames;
② MPEG4規(guī)范的視頻部分;
③ 眾多的音頻格式,包含在音頻技術(shù)的列表里,如AAC、Apple Lossless (ALAC)、A-law、IMA/ADPCM(IMA4)、線性PCM、μ-law和Core Audio等。
Cocoa Touch
是Objective-C的API, 其中最核心的部分是UIKit.Framework,應(yīng)用程序界面上的各種組件,全是由它來提供呈現(xiàn)的,除此之外它還負責處理屏幕上的多點觸摸事件,文字的輸出,圖片,網(wǎng)頁的顯示,相機或文件的存取,以及加速感應(yīng)的部分等。具體介紹如下:
(1)UIKit框架(UIKit.framework)
包含Objective-C程序接口,提供實現(xiàn)圖形,事件驅(qū)動的iPhone應(yīng)用的關(guān)鍵架構(gòu)。 iPhone OS中的每一個應(yīng)用采用這個框架實現(xiàn)如下核心功能:
為提供基礎(chǔ)性代碼建立應(yīng)用,UIKit也支持一些與設(shè)備相關(guān)的特殊功能,如下所示:
(2)基礎(chǔ)框架(Foundation Framework)
支持如下功能:
(3)電話本UI框架(Address Book UI Framework)
是一個Objective-C標準程序接口,主要用來創(chuàng)建新聯(lián)系人,編輯和選擇 電話本中存在的聯(lián)系人。它簡化了在iPhone應(yīng)用中顯示聯(lián)系人信息,并確保所有應(yīng)用使用相同的程序接口,保證應(yīng)用在不同平臺的一致性。
總結(jié):
盡可能使用高層框架,當我們要開發(fā)iPhone程序的時候,首先要現(xiàn)從上層入手,優(yōu)先使用Objective-C封裝后的庫。
也就是通過 UIKit.framework搭配Foundation.framework來進行開發(fā),而當面對一些比較復雜的功能時,像是多媒體的處理或是繪圖,再往下層去找尋相關(guān)的framwork開完成。
MVC 布局
其實在 php,包括 java(Struts+Hibernate/Mybatis+Spring)等都有涉及,很常見的一種模式?;貞浾硐拢?/span>
目的:
將人機交互從核心功能中分離出來,模型model對用戶來說是不可見的,用戶只需要觀察視圖view,用戶與模型的交互通過控制器controller提供的安全方法來實現(xiàn) 。
MVC(Model-View-Controller)將一個交互式應(yīng)用程序分成3個組件
模型:包含核心功能和數(shù)據(jù) (核心業(yè)務(wù)邏輯)
視圖:向用戶顯示信息
控制器:處理用戶輸入
變更-傳播機制保證了模型和用戶界面之間的一致性
一個模型可對應(yīng)多個視圖,如果用戶通過一個視圖的控制器改變了模型中的數(shù)據(jù),那么依賴于該數(shù)據(jù)的其他視圖也應(yīng)該反映出這樣的變化。一旦模型的數(shù)據(jù)發(fā)生了變化,模型需要通知所有相關(guān)的視圖做出相應(yīng)的變化,一起維護數(shù)據(jù)的一致性 。
模型 model
封裝了內(nèi)核功能和數(shù)據(jù),模型對于用戶來說是不可見的(M與V獨立),模型獨立于特定輸出表示或者輸入方式(M與C獨立) ,用戶只能通過控制器操作模型(C是M與V之間的橋梁)
向用戶顯示信息,不同的視圖使用不同的方法呈現(xiàn)信息,
每個視圖組件都有一個更新函數(shù),這個函數(shù)被模型變更通知激活,
被激活(此時模型已經(jīng)改變)后, 將使得視圖重新和模型一致。
在初始化階段,視圖向模型登記請求變更通知(表),
從模型獲得數(shù)據(jù)
通過狀態(tài)查詢函數(shù)實現(xiàn)。
例如:定時刷新
控制器 controller
每個視圖有一個相關(guān)的控制器組件(一一對應(yīng)),控制器組件接受事件,并翻譯成輸入,事件如何發(fā)送到控制器由用戶界面平臺決定,事件被翻譯成為對模型或者視圖的請求,如果控制器的行為依賴于模型的狀態(tài),那么控制器也需要向模型登記請求變更通知。
例如:用戶點擊按鈕,按鈕的事件響應(yīng)函數(shù)將采取相應(yīng)的措施處理用戶要求,用戶僅僅通過控制器與系統(tǒng)交互
注意:多個 MVC 可以協(xié)同一起工作
新聞熱點
疑難解答