Objective-C马路成魔【14-关键C语言功能】
郝萌主傾心貢獻(xiàn),尊重作者的勞動(dòng)成果,請(qǐng)勿轉(zhuǎn)載。
假設(shè)文章對(duì)您有所幫助,歡迎給作者捐贈(zèng),支持郝萌主。捐贈(zèng)數(shù)額任意,重在心意^_^?
我要捐贈(zèng):?點(diǎn)擊捐贈(zèng)
Cocos2d-X源代碼下載:點(diǎn)我傳送
這里介紹一些特性,在編寫(xiě)Objective-C程序時(shí)不一定須要了解。
其實(shí),這些大部分來(lái)源于相關(guān)聯(lián)的主要的C語(yǔ)言特性,
盡管C語(yǔ)言是一門(mén)過(guò)程式語(yǔ)言,當(dāng)中的一些特性與面向?qū)ο缶幊痰乃枷胧菍?duì)立的,
可是語(yǔ)言是思想也是工具,在當(dāng)中找到二者關(guān)聯(lián)和差異,會(huì)對(duì)Objective-C有更深入的理解。
數(shù)組:
定義一組有序的數(shù)據(jù)項(xiàng),即數(shù)組。
假設(shè)在字符數(shù)組結(jié)尾加入一個(gè)終止空字符(‘\0’)。就產(chǎn)生了一個(gè)通常稱為字符串的變量。
和其它變量類型一樣。必須在使用之前先聲明數(shù)組,
數(shù)組的聲明涉及聲明數(shù)組所包括元素的數(shù)值類型,以及將存儲(chǔ)在數(shù)組中的最大元素?cái)?shù)目。
函數(shù):
假設(shè)使用了自己主動(dòng)引用計(jì)數(shù)(ARC)。那么每次調(diào)用函數(shù)(方法)時(shí),局部對(duì)象的變量都會(huì)默認(rèn)初始化為空。
在函數(shù)中(和在方法中一樣)定義的變量稱為自己主動(dòng)局部變量。
由于每次調(diào)用該函數(shù)后,它們都自己主動(dòng)“創(chuàng)建”。而且它們的值對(duì)于函數(shù)來(lái)說(shuō)是局部的。
函數(shù)和方法:函數(shù)是指非對(duì)象的過(guò)程調(diào)用。方法是指對(duì)象的過(guò)程調(diào)用。
函數(shù)默認(rèn)的返回類型與方法默認(rèn)的不同。
如果沒(méi)有為方法指定返回類型。編譯器就會(huì)如果它返回id類型的值。
相同,應(yīng)該為方法聲明返回類型。不要依賴這個(gè)事實(shí)。
函數(shù)的默認(rèn)返回值是整型值。
調(diào)用函數(shù)或方法時(shí),作為參數(shù)傳遞的值將被拷貝到對(duì)應(yīng)的形參中。
使用數(shù)組時(shí)。并不是將整個(gè)數(shù)組的內(nèi)容拷貝到形參數(shù)組中。
而是傳遞一個(gè)指針。它表示數(shù)組所在的計(jì)算機(jī)內(nèi)存地址。
所以。對(duì)形參數(shù)組所作的全部更改實(shí)際上都是對(duì)原始數(shù)組而不是數(shù)組的副本運(yùn)行的。
因此。函數(shù)或方法返回時(shí),這些變化仍然有效。
塊Blocks:
塊對(duì)于c語(yǔ)言是一種擴(kuò)展。
它并沒(méi)有作為標(biāo)準(zhǔn)ANSI C所定義的部分。而是APPLE公司加入到語(yǔ)言中的。
塊
看起來(lái)更像是函數(shù)。
一般來(lái)說(shuō),塊是不能改變外部的變量的。除非使用_ _block int num = 0;這樣修飾的變量。
塊的當(dāng)中一個(gè)優(yōu)勢(shì)在于可以讓系統(tǒng)分配給其他處理器或應(yīng)用的其他線程運(yùn)行。
簡(jiǎn)言之:線程安全的。
不建議使用,不是標(biāo)準(zhǔn)的東西,當(dāng)對(duì)程序進(jìn)行移植時(shí),就會(huì)顯現(xiàn)出非常不方便。
指針:
C語(yǔ)言里的重要特性。面試必考,工作必用。
指針能夠高效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu),更改作為參數(shù)傳遞給函數(shù)和方法的值,
而且能更準(zhǔn)確、高效的處理數(shù)組。
字符串常量:
“This is char.” 這個(gè)是C樣式的字符串。
它們不是對(duì)象。
@“This is char.”這個(gè)是面向?qū)ο蟮淖址畬?duì)象。
while循環(huán)用到了空字符等于數(shù)值0這一事實(shí),熟練的Objective-C編程人員常常這樣使用。
char *from;
char *to;
while (*from)
*to++ = *from++;
*to = '\0';
函數(shù)指針:
1)常見(jiàn)應(yīng)用之中的一個(gè)是作為參數(shù)傳遞給其他函數(shù)。
2)常見(jiàn)應(yīng)用之中的一個(gè)是建立分派表。即函數(shù)列表。
上面這些C語(yǔ)言特性,要記住一個(gè)基本原則:它們都不是對(duì)象。
這意味著不能給它們傳遞消息,也不能利用它們獲得Foundation框架提供的內(nèi)存分配策略之類的最大優(yōu)勢(shì)。
其它語(yǔ)言特性:
符合字面量:
(struct data) {.month = 7, .day = 2, .year = 2011}
goto語(yǔ)句:
懶惰的程序猿才會(huì)常常濫用goto語(yǔ)句,goto語(yǔ)句的運(yùn)行導(dǎo)致在程序中產(chǎn)生一個(gè)到達(dá)特定點(diǎn)的直接分支。
假設(shè)你不懶惰,建議你還是不要常常使用該語(yǔ)句。
空語(yǔ)句:
不做不論什么操作。
逗號(hào)運(yùn)算符:
優(yōu)先級(jí)列表里最底層的運(yùn)算符。
在Objective-C語(yǔ)言中,全部的運(yùn)算符都產(chǎn)生一個(gè)值,
所以逗號(hào)運(yùn)算符的值是最右邊的表達(dá)式值。
sizeof運(yùn)算符:
Objective-C語(yǔ)言提供了sizeof運(yùn)算符。
它能夠用來(lái)確定數(shù)據(jù)類型或?qū)ο蟮拇笮?#xff0c;返回的是指定項(xiàng)的字節(jié)大小。
工作原理:
關(guān)于Objective-C語(yǔ)言和C語(yǔ)言聯(lián)系的4個(gè)事實(shí)。
1)實(shí)例變量存儲(chǔ)在結(jié)構(gòu)中。
定義一個(gè)類和它的實(shí)例變量時(shí),這些實(shí)例變量實(shí)際上存儲(chǔ)在一個(gè)結(jié)構(gòu)中。
這說(shuō)明了怎樣處理對(duì)象,對(duì)象實(shí)際上是結(jié)構(gòu)。結(jié)構(gòu)中的成員是實(shí)例變量。
所以繼承的實(shí)例變量加上你在類中加入的變量就組成了一個(gè)結(jié)構(gòu)。
使用alloc分配新對(duì)象時(shí),系統(tǒng)預(yù)留了足夠的空間來(lái)存儲(chǔ)這些結(jié)構(gòu)。
結(jié)構(gòu)中繼承的成員(從根對(duì)象中獲得的)之中的一個(gè)是名為isa的保護(hù)成員,它確定對(duì)象所屬的類。
2)對(duì)象變量實(shí)際上是指針。
來(lái)創(chuàng)建新的實(shí)例時(shí),是在為對(duì)象的新實(shí)例分配存儲(chǔ)空間(即存放結(jié)構(gòu)的空間)。然后使用結(jié)構(gòu)的指針,并將指針變量存儲(chǔ)在當(dāng)中。
3)方法是函數(shù),而消息表達(dá)式是函數(shù)調(diào)用。
方法實(shí)際上是函數(shù)。調(diào)用方法時(shí),是在調(diào)用與接收者類相關(guān)的函數(shù)。
傳遞給函數(shù)的參數(shù)接收者(self)和方法的參數(shù)。
Objective-C編譯器通過(guò)類名稱和方法名稱的組合為每一個(gè)函數(shù)產(chǎn)生一個(gè)唯一的名稱。
4)id類型是通用指針類型。
返回id類型值的方法僅僅是返回指向內(nèi)存中某對(duì)象的指針。
在C語(yǔ)言中就是 void *。
看了這4個(gè)事實(shí)后,你就會(huì)發(fā)現(xiàn),事實(shí)上,這些事實(shí)僅僅是透露出Objective-C的面向?qū)ο蟮讓邮窃鯓訉?shí)現(xiàn)的。
基本上全部的面向?qū)ο蠖际鞘褂妹嫦蜻^(guò)程的一個(gè)擴(kuò)展來(lái)實(shí)現(xiàn)的,C++也是這種。
也就是說(shuō)。對(duì)象這個(gè)東西的底層實(shí)現(xiàn)都是由過(guò)程完畢的。
簡(jiǎn)而言之:
對(duì)象都是結(jié)構(gòu)struct和指針的組合而已。
看到非常多面向?qū)ο蟮恼Z(yǔ)言編譯時(shí)都是轉(zhuǎn)換為C語(yǔ)言的結(jié)構(gòu)和指針。使用C語(yǔ)言編譯。
說(shuō)明面向?qū)ο蟮牡讓訉?shí)現(xiàn)都是差點(diǎn)兒相同的。
所以,從技術(shù)實(shí)現(xiàn)上來(lái)講,沒(méi)有特別大的變革。
可是從概念或思想上來(lái)說(shuō)。這是巨大的。
另外,那些像perl。python等等這些解釋運(yùn)行的語(yǔ)言,最后的實(shí)現(xiàn)也是C語(yǔ)言來(lái)完畢的。
語(yǔ)言是工具,但相同蘊(yùn)涵著一種哲理,或是一種思想的表達(dá)。
什么語(yǔ)法或遺忘的細(xì)節(jié)可以再查看。我理解的想法,你說(shuō)的語(yǔ)言理解能力。
總結(jié)
以上是生活随笔為你收集整理的Objective-C马路成魔【14-关键C语言功能】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 做梦梦到老公鸡是什么意思
- 下一篇: 梦到三条蛇预示着什么有一条红色的