1、前言
2、熟悉Objective-C
3、頭文件的引入
4、字面量語(yǔ)法
5、多用類(lèi)型常量而不是預(yù)處理指令#define
6、巧用枚舉表示狀態(tài)、選項(xiàng)、狀態(tài)碼

1、前言
這本書(shū)是朋友推薦的,買(mǎi)了好久了,開(kāi)始買(mǎi)的初衷就是邊學(xué)英語(yǔ)邊鞏固自己的基礎(chǔ),去年背了一年的單詞效果甚微,就想著啃一下原版書(shū)籍,誰(shuí)知道自己巨菜,大量的單詞需要查詢(xún),而且由于計(jì)算機(jī)專(zhuān)業(yè)詞匯的原因,我還要挑選不認(rèn)識(shí)單詞合適的意思,然后翻譯完自己再一句話(huà)理解一下,過(guò)程很慢很慢,去年十一點(diǎn)下班回家啃一個(gè)小時(shí)看一頁(yè),后來(lái)工作太累沒(méi)堅(jiān)持下來(lái),今年個(gè)人身體原因換了家公司,輕松了點(diǎn),就像繼續(xù)啃下去,而且想花點(diǎn)時(shí)間總結(jié)一下,希望有興趣的朋友可以一塊交流一下。
2、熟悉Objective-C
①、動(dòng)態(tài)綁定
首先Objective-C是在C的基礎(chǔ)上添加了面向?qū)ο筇卣?,而最大的特性就是消息機(jī)制,在運(yùn)行時(shí)的時(shí)候決定哪些代碼被執(zhí)行,而不是在編譯期就編譯好虛擬的表來(lái)執(zhí)行指定的代碼,而且編譯器也不用考慮所接受消息的類(lèi)型,接收消息對(duì)象的問(wèn)題也在運(yùn)行時(shí)處理。這個(gè)過(guò)程就叫做動(dòng)態(tài)綁定。
②、運(yùn)行時(shí)組件
Objective-C重要工作都由運(yùn)行時(shí)組件來(lái)完成,運(yùn)行時(shí)組件本質(zhì)上是一種和開(kāi)發(fā)者所編寫(xiě)代碼連接的動(dòng)態(tài)庫(kù),所以我們只需要更換運(yùn)行時(shí)組件就能獲得性能的提升,而不是像在編譯期做大量工作的語(yǔ)言,就需要重新編譯應(yīng)用程序代碼。
③、Objective-C內(nèi)存管理
上面我們說(shuō)了OC是C演變過(guò)來(lái)的,所以C的一些特性在OC上同樣適用,而在OC上使用了引用計(jì)數(shù)來(lái)來(lái)管理內(nèi)存,我們要知道OC中的指針是用來(lái)指向?qū)ο蟮?,而且要知道?duì)應(yīng)的指針都是在棧內(nèi)存上,對(duì)象在堆內(nèi)存上,當(dāng)我們申請(qǐng)一個(gè)對(duì)象,然后再申請(qǐng)一個(gè)變量指向同一地址,那么不會(huì)拷貝該對(duì)象,只是兩個(gè)指針同時(shí)指向這個(gè)對(duì)象。
NSString *str1 = @“abc”;
NSString *str2 = str1;
上邊的例子是棧上的兩個(gè)指針指向堆上的一個(gè)@“abc”對(duì)象。這就讓我們更清楚的理解了深淺拷貝的問(wèn)題
還有需要我們注意的問(wèn)題是分配在堆上的內(nèi)存必須直接管理,分配在棧上的內(nèi)存會(huì)在棧pop出來(lái)的時(shí)候自動(dòng)的清理掉,而Objective-C把堆內(nèi)存的內(nèi)存管理抽象出來(lái)你不需要 在用malloc和free來(lái)分配和釋放對(duì)象的內(nèi)存Objective-C的運(yùn)行時(shí)通過(guò)引用計(jì)數(shù)的架構(gòu)抽象這種內(nèi)存管理。
注意:但是在Objective-C中我們可能會(huì)遇到一個(gè)變量沒(méi)有帶
*而在存儲(chǔ)在??臻g上,這些變量不會(huì)持有Objective-C對(duì)象,很常見(jiàn)的例子就是CGRect,這是CoreGraphics框架的。
CGRect是一個(gè)C語(yǔ)言的結(jié)構(gòu)體,定義如下:
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
這種類(lèi)型的結(jié)構(gòu)體貫穿整個(gè)系統(tǒng)框架,這些地方如果換成Objective-C的對(duì)象會(huì)增加內(nèi)存開(kāi)銷(xiāo),