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