“Objective-C語言是在C語言的基礎(chǔ)上刃宵,又加了一層物件導(dǎo)向與動(dòng)態(tài)語言特性的語言,很多基本型別是直接來自於C語言徘公。C語言在發(fā)展之初牲证,並沒有布林值,於是Objective-C語言在發(fā)展的過程中关面,定義了自己的BOOL坦袍,但是在C99規(guī)格中,C語言又有了自己的布林型別bool等太,而Objective-C又可以混和C++語法變成Objective-C++捂齐,C++裡頭也有bool∷趼眨”
“那麼奠宜,Objective-C的BOOL,與C99以及C++的bool有什麼差別呢瞻想?
在iOS的64位元或是在Apple Watch上压真,Objective-C的BOOL會(huì)直接等於定義在stdbool.h裡頭的bool,其實(shí)是int蘑险,而如果使用了C++滴肿,那麼stdbool.h裡頭的定義就變成是C++的bool。但佃迄,如果是在Mac OS X上泼差,或是32位元的iOS環(huán)境下,BOOL就會(huì)被定義成是一個(gè)char和屎,而BOOL與bool拴驮,就分別是一個(gè)byte或是四個(gè)bytes的差別〔裥牛”
“所以,在64位元或Apple Watch上宽气,BOOL與bool並沒有差別随常,但我們通常不能假設(shè)我們寫的code只會(huì)在這種環(huán)境下執(zhí)行,雖然在其他環(huán)境下萄涯,使用BOOL或是bool通常也沒什麼影響绪氛,但既然某個(gè)API明確就是要求你傳入BOOL,那就傳入YES或NO涝影,好像也沒什麼非要傳入true或false的理由枣察。
另外,當(dāng)我們想把BOOL轉(zhuǎn)成NSNumber,最簡(jiǎn)單的寫法還是直接使用Xcode 4.4之後的literals的寫法序目,寫成@(YES)或@(NO)臂痕,另外Core Foundation裡頭也定義了kCFBooleanTrue與kCFBooleanFalse,也具有同樣的功能猿涨∥胀”
內(nèi)容源參考: “KKBOX iOS/Mac OS X基本開發(fā)教材.” iBooks.