Objective-C面向?qū)ο蟪躞w驗
Objective-C面向?qū)ο?/strong>初體驗是本文要介紹的內(nèi)容,主要是來了解面向?qū)ο?/strong>語言Objective-C,這里沒有細節(jié)的語法,大都是關于Objective-C面向?qū)ο?/strong>概念理解的東西,來看詳細內(nèi)容講解。
1、前言
語言其本質(zhì)上都是某種抽象,不管是現(xiàn)實生活中人們交流的語言,還是計算機語言.
2、對象
在Objective-C中,所有的對象都有一個共同的特征,就是每一個對象都包含一個isa指針.這個指針指向當前對象所屬的類.
在Objective-C中存在一個名為id的類型,這個和上面所說這個isa指針有一定的聯(lián)系.
C代碼
- typedef struct objc_object {
- Class isa;
- } *id;
- typedef struct Objective-C_object {
- Class isa;
- } *id;
其中Class類型為指向objc_class結(jié)構(gòu)體的指針類型.
這些對象在內(nèi)存中都是由其地址唯一標示,所有的對象都是id類型的.
我們繼續(xù)來將這個isa指針,通過isa指針我們可以在運行的時候知道當前對象是屬于什么Class的,
對象的內(nèi)存管理:
在Objective-C中,存在兩種內(nèi)存管理的方式
一種是基于引用技術的,在這種情況下,程序員需要時刻注意內(nèi)存的申請和釋放,以免發(fā)生內(nèi)存泄露.
還有一種是垃圾回收,學過Java的同學都知道java的垃圾回收,使得程序員從繁雜容易出錯的內(nèi)存釋放工作中得到解放.
目前在Pihone的開發(fā)環(huán)境中不支持垃圾回收的方式.
3、消息
消息這個概念是比較特殊的,在其他的一般的計算機語言中都叫做方法調(diào)用或者函數(shù)調(diào)用,但在Objective-C中,很形象的叫做消息,在語法上也和別的語言的函數(shù)或者方法差別很大.
在我們現(xiàn)實生活中,人和人進行溝通就是通過不同形式的消息進行的,比如說郵件,首先得有接受者,然后將消息內(nèi)容通過郵件發(fā)送給接受者.
如果將上面的情景用Objective-C的消息語法描述出來差不多是這樣的
[郵件接受者 郵件:郵件內(nèi)容]
我們將郵件接受者稱為receiver,郵件:郵件內(nèi)容的整體稱作message
- [Receiver message]
如果將message再分解,我們可以寫成下面的
- [Receiver selector:argument]
這種情景在別的語言中就是調(diào)用recevier這個對象的某個方法
這里的selector為方法名,他在消息發(fā)送的時候,會”選擇”一個方法的實現(xiàn)來運行,所以這里的方法名被稱作為選擇器
而且這里的selector也是Objective-C實現(xiàn)多態(tài)的關鍵所在.
4、類
在Objective-C中,類只支持單繼承.
在程序運行的時候,編譯器會自動根據(jù)你的類定義生成一個”類對象”,這個”類對象”是類實例對象的原型,它知道如何去創(chuàng)建屬于這個類的實例對象.
實例對象擁有各自變量屬性,而方法都是共享的.
“類對象”的type都為Class,上面有提到過Class類型為指向objc_class結(jié)構(gòu)體的指針類型.
在Objective_C中NSObject類是一個根類。
小結(jié):Objective-C面向?qū)ο?/strong>初體驗的內(nèi)容介紹完了,希望本文對你有所幫助!