從C/C++到Objective-C(一)
? ? ?對于習(xí)慣了使用C/C++,也多少見識了Java,Python等編程語言的我,最初看到OC代碼的時候,真的不得不吐槽啊,這都是些什么東西啊,怎么“-“,”@“,”[ ]",各種符號到處都是,還是C++代碼看著舒服啊……不過慢慢見得多了后,也就習(xí)慣了,也都是那回事兒嘛。
? ? ?首先明白一點,OC也是對C的擴(kuò)展,在C的基礎(chǔ)上增加了面向?qū)ο螅簿秃帽菴++和C的關(guān)系一樣,只是C++和C是關(guān)系更親密一些罷了。所以,C中的基本語法,類型符,關(guān)鍵詞這些在OC中都是適用的。
? ? ?接下來還是從經(jīng)典的Hello world開始吧:
#importint?main?(int?argc,?const?char?*argv[])
{
????NSLog?(@"Hello?World!");
????return?(0);
}?//?main? ? ?#import 就類似#include,#include也可以用但是基本上也沒有人這樣用,用#import可以防止頭文件重復(fù)包含,而免去了C中的#ifdef等命令。
? ? ?現(xiàn)在就主要看看NSLog (@"Hello world!");這句代碼的,其他的都和c一樣了,當(dāng)然也沒幾句,=.=
? ? ?NSLog()函數(shù)就類似于C中的printf(); 用法也和printf()差不多,可以包含格式說明符和格式說明符對應(yīng)的參數(shù)。這里NS前綴的用法是為了避免名字沖突,Cocoa給其所有函數(shù),常量,類型名稱都加了NS,所以當(dāng)看到NS開頭的也就知道其實也就是來自Cocoa工具包中的了。
? ? ?@符號是OC在標(biāo)準(zhǔn)C語言基礎(chǔ)上添加的特性之一,就和后面會說到的中括號[ ]類似,都是OC在C上新添加的特性。@符號意味著引號類的字符串是作為Cocoa中的NSString元素來處理的,NSString也就類似C++ std中的String類啦。只是在這里得注意不能將C風(fēng)格的字符串,也就是沒有這個@符號的字符串直接傳遞給NSLog(),這樣做編譯器會給出警告,如果運行程序的話可能會直接奔潰,所以,還是得隨時知道你是在寫C代碼還是OC代碼。別兩個搞混在一起了。
? ? ?對于OC中的布爾類型須記住一點,OC中的BOOL類型只有兩個值YES,NO,其中YES對應(yīng)的值是1,并且只能是1, 對于大于1的數(shù)并不能等同于YES,這點和C中是有區(qū)別的,而NO對應(yīng)的也就是0了。這點在寫程序,執(zhí)行if判斷的時候得特別注意一下。
? ? ?OC中過程式函數(shù)的書寫和C都是一樣的,看看就懂了,下面來幾個感受一下:
#import//?returns?NO?if?the?two?integers?have?the?same
//?value,?YES?otherwise
BOOL?areIntsDifferent?(int?thing1,?int?thing2)
{
????if?(thing1?==?thing2)?{
????????return?(NO);
????}?else?{
????????return?(YES);
????}
}?//?areIntsDifferent
//?given?a?YES?value,?return?the?human-readable
//?string?"YES".?Otherwise?return?"NO"
NSString?*boolString?(BOOL?yesNo)
{
????if?(yesNo?==?NO)?{
????????return?(@"NO");
????}?else?{
????????return?(@"YES");
????}
}?//?boolString
int?main?(int?argc,?const?char?*argv[])?
{
????BOOL?areTheyDifferent;
????areTheyDifferent?=?areIntsDifferent?(5,?5);
????NSLog?(@"are?%d?and?%d?different??%@",?
???????????5,?5,?boolString(areTheyDifferent));
????areTheyDifferent?=?areIntsDifferent?(23,?42);
????NSLog?(@"are?%d?and?%d?different??%@",?
???????????23,?42,?boolString(areTheyDifferent));
????return?(0);
}?//?main
引用書籍:《Objective-C 基礎(chǔ)教程(第二版)》





