什么是Cocoa?
? ? ? ?Cocoa不是一種編程語言(它可以運行多種編程語言)宛琅,它也不是一個開發(fā)工具(通過命令行我們?nèi)匀豢梢蚤_發(fā)Cocoa程序)胃碾,它是創(chuàng)建Mac OS X和IOS程序的原生面向?qū)ο驛PI麻削,為這兩者應(yīng)用提供了編程環(huán)境。
?? ? ? Cocoa本身是一個框架的集合铛绰,它包含了眾多子框架舞吭,其中最重要的要數(shù)“Foundation”和“UIKit”绰上。前者是框架的基礎(chǔ)旨怠,和界面無關(guān),其中包含了大量常用的API蜈块;后者是基礎(chǔ)的UI類庫鉴腻,在IOS開發(fā)中會經(jīng)常用到。
iOS開發(fā)是基于cocoa框架的百揭,主要包括5層爽哎,從上到下依次是Application,Cocoa Touch,Media,Core Services,Core OS, 其中Core Frameworks包括UIKit及Foundation分別位于Cocoa Touch層和Core Services層器一。
UIKit是UI類庫课锌。
Fundation是框架基礎(chǔ)。
其實所有的Mac OS X和IOS程序都是由大量的對象構(gòu)成祈秕,而這些對象的根對象都是NSObject产镐,NSObject就處在Foundation框架之中
1.Fundation:?
? ? ? ? ?作為通用的面向?qū)ο蟮暮瘮?shù)庫,F(xiàn)oundation提供了字符串踢步,數(shù)值的管理,容器及其枚舉丑掺,分布式計算获印,事件循環(huán),以及一些其它的與圖形用戶界面沒有直接關(guān)系的功能街州。其中用于類和常數(shù)的“NS”前綴來自于Cocoa的來源兼丰,NeXTSTEP。它可以在Mac OS X和iOS中使用唆缴。
“應(yīng)用程序工具包”鳍征,或稱AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序與圖形用戶界面交互所需的代碼面徽。它是基于Foundation建立的艳丛,也使用“NS”前綴匣掸。它只能在Mac OS X中使用。
“用戶界面工具包”氮双,或稱UIKit(User Interface Kit)碰酝,是用于iOS的圖形用戶界面工具包。與AppKit不同戴差,它使用“UI”的前綴送爸。
通常我們會將他們分為幾類:
? ? ? ? 1.值對象
? ? ? ? 2.集合
? ? ? ? 3.操作系統(tǒng)服務(wù):文件系統(tǒng)、URL暖释、進程通訊
? ? ? ? 4.通知
? ? ? ? 5.歸檔和序列化
? ? ? ? 6.表達式和條件判斷
? ? ? ? 7.Objective-C語言服務(wù)
2.Core Foundation框架
? ? ? ? Core Foundation框架 (CoreFoundation.framework) 是一組C語言接口袭厂,它們?yōu)閕OS應(yīng)用程序提供基本數(shù)據(jù)管理和服務(wù)功能。下面列舉該框架支持進行管理的數(shù)據(jù)以及可提供的服務(wù):
? ? ? ?1.群體數(shù)據(jù)類型 (數(shù)組球匕、集合等)
? ? ? ?2.程序包
? ? ? ?3.字符串管理
? ? ? ?4.日期和時間管理
? ? ? ?5.原始數(shù)據(jù)塊管理
? ? ? ?6.偏好管理
? ? ? ?7.URL及數(shù)據(jù)流操作
? ? ? ?8.線程和RunLoop
? ? ? ?9.端口和soket通訊
Core Foundation框架和Foundation框架緊密相關(guān)纹磺,它們?yōu)橄嗤δ芴峁┙涌冢獸oundation框架提供Objective-C接口谐丢。如果您將Foundation對象和Core Foundation類型摻雜使用爽航,則可利用兩個框架之間的 “toll-free bridging”。所謂的Toll-free bridging是說您可以在某個框架的方法或函數(shù)同時使用Core Foundatio和Foundation 框架中的某些類型乾忱。很多數(shù)據(jù)類型支持這一特性讥珍,其中包括群體和字符串?dāng)?shù)據(jù)類型。每個框架的類和類型描述都會對某個對象是否為 toll-free bridged窄瘟,應(yīng)和什么對象橋接進行說明衷佃。
Objective-C指針與CoreFoundation指針之間的轉(zhuǎn)換】
ARC僅管理Objective-C指針(retain、release蹄葱、autorelease)氏义,不管理CoreFoundation指針,CF指針由人工管理图云,手動的CFRetain和CFRelease來管理惯悠,注,CF中沒有autorelease竣况。
CocoaFoundation指針與CoreFoundation指針轉(zhuǎn)換克婶,需要考慮的是所指向?qū)ο笏袡?quán)的歸屬。ARC提供了3個修飾符來管理丹泉。
1. __bridge情萤,什么也不做,僅僅是轉(zhuǎn)換摹恨。此種情況下:
i). 從Cocoa轉(zhuǎn)換到Core筋岛,需要人工CFRetain,否則晒哄,Cocoa指針釋放后睁宰, 傳出去的指針則無效肪获。
ii). 從Core轉(zhuǎn)換到Cocoa,需要人工CFRelease勋陪,否則贪磺,Cocoa指針釋放后,對象引用計數(shù)仍為1诅愚,不會被銷毀寒锚。
2. __bridge_retained,轉(zhuǎn)換后自動調(diào)用CFRetain违孝,即幫助自動解決上述i的情形刹前。
3. __bridge_transfer,轉(zhuǎn)換后自動調(diào)用CFRelease雌桑,即幫助自動解決上述ii的情形喇喉。
3.Cocoa Touch框架
Cocoa Touch框架包含創(chuàng)建世界一流 iOS 應(yīng)用程序所需的所有框架,從 3D 圖形校坑、專業(yè)音頻到網(wǎng)絡(luò)拣技,甚至提供特殊設(shè)備訪問 API 以控制攝像機或從 GPS 硬件獲取位置。Cocoa Touch 既包含只需要幾行代碼就可以完成全部任務(wù)的強大的 Objective-C 框架耍目,也在需要時提供基礎(chǔ)的 C 語言 API 來直接訪問系統(tǒng)膏斤。這些框架示例包括:
? ? ? ? 1.Core Animation:通過 Core Animation,您就可以通過基于組合獨立圖層的簡單編程模型來創(chuàng)建豐富的用戶體驗邪驮。
? ? ? ? 2.Core Audio: Core Audio 是播放莫辨、處理和錄制音頻的專業(yè)級技術(shù),能夠輕松為您的應(yīng)用程序添加強大的音頻功能毅访。
? ? ? ? 3.Coce Data:Core Data 提供面向?qū)ο蟮臄?shù)據(jù)管理解決方案沮榜,該方案易于使用和理解,甚至可處理任何應(yīng)用或大或小的數(shù)據(jù)模型喻粹。
Cocoa Touch框架主要包含:UIKit蟆融,MapKit,Game Kit守呜,Message UI/Address Book UI
? ? ? ? (1) UIKit 負責(zé)啟動和結(jié)束應(yīng)用程序型酥,控制界面和多觸點事件
? ? ? ? (2)Map Kit 提供地圖的相關(guān)服務(wù),定位或者區(qū)域檢測等
? ? ? ? (3)Game Kit 創(chuàng)建和使用網(wǎng)絡(luò)機制
? ? ? ? (4)Message UI/Address Book UI 提供操作電子郵件和聯(lián)系人的信息
Foundation類層次的根是NSObject類弛饭,它(和NSObject及NSCopying協(xié)議一起)定義了基本的對象屬性和行為。NSObject是一個抽象類萍歉,該類被其他類繼承來產(chǎn)生對象侣颂。Foundation框架的剩余部分由幾組相互關(guān)聯(lián)的類和一些獨立的類組成。