国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

讀書筆記 之 了解OC 的起源 (Effective Objective - C 2.0)

2019-11-08 00:19:02
字體:
供稿:網(wǎng)友

Objective-C  與C++ , java 等面向?qū)ο蟮恼Z言類似,若是使用過其中非 OC 的另一種語言,那么就能理解OC 所用的許多范式 與模板

但是感覺語法很陌生是不是?

那是因為OC 使用的是“消息結(jié)構(gòu)”(message structure) 而非“函數(shù)調(diào)用” (function calling)。

OC 是Smalltalk 演化來的,smalltalk是消息型語言的鼻祖。

消息與函數(shù)調(diào)用之間的區(qū)別看上去就像下面這樣:

// Message (OC)

Object *obj = [ Object new ];

[obj performWith:parameter1 and parameter2];

//Function  calling

Object *obj = new Object;

obj ->perfrom (parammeter1, parameter2);

關(guān)鍵區(qū)別在于:使用消息結(jié)構(gòu)的語言,其運行時所應(yīng)執(zhí)行的代碼由環(huán)境運行來決定;而是用函數(shù)調(diào)用的語言,則由編譯器決定。如果范例中調(diào)用的函數(shù)是多態(tài)的,那么在運行時就要按照“虛方法表”來查處到底應(yīng)該執(zhí)行那個函數(shù)的實現(xiàn)。而采用消息結(jié)構(gòu)的語言, 不論是否多態(tài),總是在運行時才回去查找所要執(zhí)行的方法。實際上,編譯器甚至都不關(guān)心接收消息的對象時何種類型。接收消息的對象問題也要在運行時處理,其過程叫做“動態(tài)綁定”(dynamic binding)。

運行期組件:OC 的重要工作都由“運行期組件”(runtime component)而非編譯器來完成。使用OC的面向?qū)ο筇匦缘乃璧娜繑?shù)據(jù)結(jié)構(gòu)及函數(shù)都在運行期組件里。舉例來說:運行期組件里包含全部內(nèi)存管理方法。運行期組件本質(zhì)上就是一種與開發(fā)者所編寫的代碼相鏈接的動態(tài)庫,齊代碼能把開發(fā)者編寫的所有程序粘合起來,這樣的話,只需更新運行期組件,即可提升應(yīng)用程序性能。

所有OC語言的對象所占內(nèi)存總是費陪在堆空間(heap space)中,而絕對不會分配在棧上 (stack)。  (不信寫行代碼試試?)

thatString 變量指向分配在堆空間里的某塊內(nèi)存,其中含有一個NSString對象,也就是說再創(chuàng)建一個變量,令其指向同一地址,那么并不拷貝該對象,只是這兩個變量會同時指向此對象。

只有一個NSString實例,然而有2 個變量指向此實例,兩個變量都是NSString* 型,這說明當(dāng)前棧幀李分配了2 快內(nèi)存,每塊內(nèi)存的大小都能容下一枚指針,這2 塊內(nèi)存里的值 都一樣,就是NSString實例的內(nèi)存地址。

下面的圖描述了此時的內(nèi)存布局。存放在NSString實例中的數(shù)據(jù)含有代表字符串實際內(nèi)容的字節(jié)。

注意: 分配在堆中的內(nèi)存必須直接管理,而分配在棧上用于保存變量的內(nèi)存則會在其棧幀彈出時自動清理。

OC將堆內(nèi)存管理抽象出來了,不需要malloc及free來分配或釋放對象所占內(nèi)存。OC運行期環(huán)境把這部分工作抽象為一套內(nèi)存管理架構(gòu),名為“引用計數(shù)”。

要點: 1,OC 為C語言添加了面向?qū)ο筇匦裕瞧涑C 使用動態(tài)綁定的消息結(jié)構(gòu), 就是說,在運行時才會檢查對象類型。接受一條消息后,究竟應(yīng)執(zhí)行何種代碼,是由運行期環(huán)境,而非編譯器來決定。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新竹县| 商都县| 东阳市| 凤翔县| 汝城县| 左云县| 彰化市| 太和县| 东乡族自治县| 平安县| 虹口区| 桦南县| 图们市| 宿州市| 瑞丽市| 涡阳县| 延寿县| 汶川县| 扶余县| 阆中市| 西丰县| 安溪县| 宣恩县| 九龙县| 彭山县| 新龙县| 德兴市| 黄山市| 沛县| 阿拉尔市| 科技| 井研县| 平阴县| 岑巩县| 方山县| 衡东县| 肃宁县| 龙游县| 吐鲁番市| 高平市| 淮阳县|