從C/C++到Objective-C(一)
? ? ?對于習(xí)慣了使用C/C++,也多少見識了Java,Python等編程語言的我,最初看到OC代碼的時候,真的不得不吐槽啊,這都是些什么東西啊,怎么“-“,”@“,”[ ]",各種符號到處都是,還是C++代碼看著舒服啊……不過慢慢見得多了后,也就習(xí)慣了,也都是那回事兒嘛。
? ? ?首先明白一點(diǎn),OC也是對C的擴(kuò)展,在C的基礎(chǔ)上增加了面向?qū)ο?,也就好比C++和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開頭的也就知道其實(shí)也就是來自Cocoa工具包中的了。
? ? ?@符號是OC在標(biāo)準(zhǔn)C語言基礎(chǔ)上添加的特性之一,就和后面會說到的中括號[ ]類似,都是OC在C上新添加的特性。@符號意味著引號類的字符串是作為Cocoa中的NSString元素來處理的,NSString也就類似C++ std中的String類啦。只是在這里得注意不能將C風(fēng)格的字符串,也就是沒有這個@符號的字符串直接傳遞給NSLog(),這樣做編譯器會給出警告,如果運(yùn)行程序的話可能會直接奔潰,所以,還是得隨時知道你是在寫C代碼還是OC代碼。別兩個搞混在一起了。
? ? ?對于OC中的布爾類型須記住一點(diǎn),OC中的BOOL類型只有兩個值YES,NO,其中YES對應(yīng)的值是1,并且只能是1, 對于大于1的數(shù)并不能等同于YES,這點(diǎn)和C中是有區(qū)別的,而NO對應(yīng)的也就是0了。這點(diǎn)在寫程序,執(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ǔ)教程(第二版)》