Effective看一百遍絕對(duì)不過(guò)分,不過(guò)分散罕!
我來(lái)整理下Effective中各個(gè)知識(shí)要點(diǎn)
(好多原理性的東西我也不大理解椭员,只寫我知道的,我不知道的我就不寫出來(lái)裝13了)
熟悉Objective-C
<code>
- OC是一門動(dòng)態(tài)語(yǔ)言;
- OC對(duì)象都存儲(chǔ)在“堆空間”;
- OC當(dāng)中不含“*”的變量都是存儲(chǔ)在“検嗖埃空間”,(事實(shí)上都是一些C語(yǔ)言基本類型實(shí)現(xiàn)額);
- 盡量把導(dǎo)入頭文件的時(shí)機(jī)往后延替久,比如在.h文件中使用@class向前聲明,而在.m文件中使用#import;
(雖然#import并不會(huì)造成循環(huán)引用祟辟,但是我們還是盡量保持這樣做) - 盡量使用字面量語(yǔ)法@;
字面量語(yǔ)法創(chuàng)建出來(lái)的字符串、數(shù)組侣肄、字典對(duì)象都是不可變的旧困,如果想要?jiǎng)?chuàng)建可變的對(duì)象,你可以這樣做:
<code>NSMutableArray *mutable = [@[@1,@2,@3,@4]mutableCopy];</code> - 多用static const 少用define;
主要注意變量名稱稼锅。常用的命名方法是:若常量局限于某“編譯單元”也就是實(shí)現(xiàn)文件之內(nèi)吼具,則在前面加字母k;若是在類之外可見(jiàn),則通常以類名為前綴矩距。 - 使用extern來(lái)聲明全局變量;
- 使用typedef關(guān)鍵字來(lái)重新定義枚舉類型;
- 在處理枚舉類型的switch語(yǔ)句中不要實(shí)現(xiàn)default分支;
</code>
對(duì)象拗盒、消息、運(yùn)行期
<code>
- getter=<name>,setter=<name>指定存取方法名(很少這么干);
- 在讀取實(shí)例對(duì)象的時(shí)候采用直接訪問(wèn)的形式(點(diǎn)語(yǔ)法),而在設(shè)置實(shí)例變量的時(shí)候通過(guò)屬性來(lái)做(_);
- 在初始化方法及dealloc方法中锥债,總是應(yīng)該直接通過(guò)實(shí)例變量來(lái)讀寫數(shù)據(jù);
- 在惰性初始化方法中采用屬性來(lái)讀取數(shù)據(jù);
</code>
接口與API設(shè)計(jì)
<code> - Apple 宣稱保留使用所有“兩字母前綴”的權(quán)利陡蝇,所以你自己選用的前綴應(yīng)該是三個(gè)字母;
- 若自己開發(fā)的程序庫(kù)中用到了第三方庫(kù)哮肚。則應(yīng)為其中的名稱加上前綴登夫;
- 請(qǐng)使用全能初始化方法
- 請(qǐng)問(wèn)自己實(shí)現(xiàn)的類實(shí)現(xiàn)一個(gè)description方法;
- 實(shí)現(xiàn)description方法時(shí)可以使用字典來(lái)幫助輸出允趟;
- 控制臺(tái)輸出對(duì)象時(shí)調(diào)用的是debugDescription方法恼策,debugDescription默認(rèn)直接調(diào)用description方法,當(dāng)然你也可以分別實(shí)現(xiàn)潮剪;
- 盡量把屬性聲明為不可變屬性涣楷;
- 給私有方法添加前綴分唾,不要使用“_”因?yàn)檫@是蘋果使用的私有方法前綴;
- ARC并不是“異常安全的”狮斗,也就是說(shuō)绽乔,如果拋出了異常,那么原本該在“域”結(jié)尾釋放的對(duì)象不會(huì)釋放碳褒,也就造成了內(nèi)存泄漏折砸;
</code>