Cocoa, Foundation, AppKit, UIKit

Cocoa包含兩個(gè)主要的Objective-C對(duì)象庫闻丑,稱為“框架”关顷⌒舷恚框架的功能類似于動(dòng)態(tài)庫洽腺,即可以在運(yùn)行時(shí)動(dòng)態(tài)的載入應(yīng)用程序的地址空間脚粟,但框架作為一個(gè)捆綁 (計(jì)算機(jī))而非獨(dú)立文件,其中除了可執(zhí)行代碼外蘸朋,也包含了資源核无,頭文件和文檔。

“Foundation工具包”藕坯,或簡稱為“Foundation”团南,首先出現(xiàn)在OpenStep中。在Mac OS X中炼彪,它是基于Core Foundation的吐根。作為通用的面向?qū)ο?/a>的函數(shù)庫,F(xiàn)oundation提供了字符串辐马,數(shù)值的管理佑惠,容器及其枚舉,分布式計(jì)算,事件循環(huán)膜楷,以及一些其它的與圖形用戶界面沒有直接關(guān)系的功能旭咽。其中用于類和常數(shù)的“NS”前綴來自于Cocoa的來源,NeXTSTEP赌厅。它可以在Mac OS X和iOS中使用穷绵。

“用戶界面工具包”,或稱UIKit(UserInterfaceKit)特愿,是用于iOS的圖形用戶界面工具包仲墨。與AppKit不同,它使用“UI”的前綴揍障。

(MAC OS X中使用)“應(yīng)用程序工具包”目养,或稱AppKit(ApplicationKit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序與圖形用戶界面交互所需的代碼毒嫡。它是基于Foundation建立的癌蚁,也使用“NS”前綴。它只能在Mac OS X中使用兜畸。

Cocoa構(gòu)架的一個(gè)關(guān)鍵部分是其多樣的視圖模型努释。總體而言咬摇,它是基于由Quartz提供的PDF繪制模型的伐蒂,該特性允許使用PostScript繪制自定義圖形內(nèi)容,同時(shí)也自動(dòng)的支持了打印機(jī)以及類似設(shè)備肛鹏。由于Cocoa框架管理了全部的繪圖操作逸邦,例如裁剪,滾動(dòng)在扰,縮放等缕减,程序員可以不再重復(fù)實(shí)現(xiàn)基礎(chǔ)的功能,而可以集中于提供程序的關(guān)鍵功能上健田。

動(dòng)態(tài)綁定

在多數(shù)面向?qū)ο?/a>的編程語言中,調(diào)用方法是由直接調(diào)用內(nèi)存中一段固定的代碼實(shí)現(xiàn)的卦绣。由于這種方法需要預(yù)定義的處理命令的類绞佩,因而限制了程序的設(shè)計(jì)捧杉,通常采用責(zé)任鏈模式作為其設(shè)計(jì)模式。雖然Cocoa在多數(shù)地方仍然采用這種方式好爬,但通過Objective-C的動(dòng)態(tài)綁定特性增加了更多設(shè)計(jì)的自由性。

在Objective-C中甥啄,消息由selector所代表存炮,其為描述需要調(diào)用的方法的一個(gè)字符串。在發(fā)送消息時(shí),該selector被送入Objective-C運(yùn)行時(shí)中穆桂,在可用方法列表中尋找對(duì)應(yīng)的方法宫盔,然后調(diào)用該方法的實(shí)際實(shí)現(xiàn)。由于selector只是文本數(shù)據(jù)享完,因此它可以保存在文件中灼芭,通過網(wǎng)絡(luò)或在進(jìn)程間傳輸,或以其它方式進(jìn)行操作般又。方法的實(shí)現(xiàn)是在運(yùn)行時(shí)查找的彼绷,而非編譯時(shí)。這樣的做法會(huì)造成一些性能損失茴迁,但動(dòng)態(tài)綁定允許相同的selector代表不同的實(shí)現(xiàn)寄悯。

利用這些特性,Cocoa提供了一種通用的數(shù)據(jù)管理技術(shù)堕义,稱為鍵-值編碼(KVC)猜旬。這種技術(shù)允許對(duì)象的數(shù)據(jù)或?qū)傩钥梢栽谶\(yùn)行時(shí)通過其鍵名進(jìn)行查找,其中胳螟,屬性的名稱即為其值的鍵名昔馋。在靜態(tài)語言中,這樣的做法是不可能的糖耸。KVC大大的增加了設(shè)計(jì)的自由度:通過KVC秘遏,無需知道對(duì)象的類型即可訪問其屬性或數(shù)據(jù)。另外嘉竟,利用鍵-值-觀測(cè)器(KVO)技術(shù)和NSUndoManager類邦危,可以提供自動(dòng)的撤銷/重做支持。

內(nèi)存管理

Cocoa環(huán)境的一個(gè)特點(diǎn)是它可以管理動(dòng)態(tài)分配的內(nèi)存舍扰。Cocoa中絕大部分類的基類都是NSObject倦蚪,它實(shí)現(xiàn)了引用計(jì)數(shù)的內(nèi)存管理模型。從NSObject繼承的類可以響應(yīng)retain和release消息边苹,以增減其引用計(jì)數(shù)陵且;也可以通過發(fā)送retainCount消息來獲取其引用計(jì)數(shù)。一個(gè)以alloc个束,copy或Objective-C 2.0中增加的new所創(chuàng)建的對(duì)象的引用計(jì)數(shù)為1慕购;向?qū)ο蟀l(fā)送retain消息會(huì)將計(jì)數(shù)加1,而發(fā)送release消息則會(huì)將計(jì)數(shù)減1茬底。若對(duì)象的引用計(jì)數(shù)減少到了0沪悲,則它會(huì)被銷毀。dealloc消息類似于C++中的析構(gòu)函數(shù)阱表,在對(duì)象被銷毀之前可能會(huì)被調(diào)用殿如,但系統(tǒng)不保證會(huì)發(fā)送該消息贡珊。這種引用計(jì)數(shù)的模型與微軟的COM中的IUnknown接口特性十分相似,它提供了AddRef和Release接口涉馁,與retain和release對(duì)應(yīng)门岔。

從Objective-C 2.0開始,Objective-C運(yùn)行時(shí)實(shí)現(xiàn)了可選的垃圾收集器谨胞。若垃圾收集的特性被激活固歪,則運(yùn)行時(shí)會(huì)將引用計(jì)數(shù)相關(guān)的操作,例如“retain”和“release”胯努,變?yōu)闊o操作牢裳。iOS上的Objective-C 2.0實(shí)現(xiàn)中不包含垃圾收集器。垃圾收集器運(yùn)行在一個(gè)低優(yōu)先級(jí)的后臺(tái)線程中叶沛,并可以在用戶動(dòng)作時(shí)暫停蒲讯,從而保持良好的用戶體驗(yàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灰署,一起剝皮案震驚了整個(gè)濱河市判帮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌溉箕,老刑警劉巖晦墙,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肴茄,居然都是意外死亡晌畅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門寡痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抗楔,“玉大人,你說我怎么就攤上這事拦坠×铮” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵贞滨,是天一觀的道長入热。 經(jīng)常有香客問我,道長晓铆,這世上最難降的妖魔是什么勺良? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮尤蒿,結(jié)果婚禮上郑气,老公的妹妹穿的比我還像新娘幅垮。我一直安慰自己腰池,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著示弓,像睡著了一般讳侨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奏属,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天跨跨,我揣著相機(jī)與錄音,去河邊找鬼囱皿。 笑死勇婴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嘱腥。 我是一名探鬼主播耕渴,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼齿兔!你這毒婦竟也來了橱脸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤分苇,失蹤者是張志新(化名)和其女友劉穎添诉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體医寿,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栏赴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糟红。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艾帐。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盆偿,靈堂內(nèi)的尸體忽然破棺而出柒爸,到底是詐尸還是另有隱情,我是刑警寧澤事扭,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布捎稚,位于F島的核電站,受9級(jí)特大地震影響求橄,放射性物質(zhì)發(fā)生泄漏今野。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一罐农、第九天 我趴在偏房一處隱蔽的房頂上張望条霜。 院中可真熱鬧,春花似錦涵亏、人聲如沸宰睡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拆内。三九已至旋圆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間麸恍,已是汗流浹背灵巧。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抹沪,地道東北人刻肄。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像融欧,于是被迫代替她去往敵國和親肄方。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,139評(píng)論 30 470
  • 注:此文章來源:Job_Yang 的簡書 1. Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Categ...
    廣益散人閱讀 1,349評(píng)論 0 13
  • 37.cocoa內(nèi)存管理規(guī)則 1)當(dāng)你使用new,alloc或copy方法創(chuàng)建一個(gè)對(duì)象時(shí)逝薪,該對(duì)象的保留計(jì)數(shù)器值為1...
    如風(fēng)家的秘密閱讀 842評(píng)論 0 4
  • 29.理解引用計(jì)數(shù) Objective-C語言使用引用計(jì)數(shù)來管理內(nèi)存隅要,也就是說,每個(gè)對(duì)象都有個(gè)可以遞增或遞減的計(jì)數(shù)...
    Code_Ninja閱讀 1,487評(píng)論 1 3
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問題 3.指南認(rèn)識(shí) 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 4,984評(píng)論 0 13