15.用前綴避免命名空間沖突
- Objective-C沒有命名空間機(jī)制
- 選擇與你的公司、應(yīng)用程序有關(guān)聯(lián)的名稱作為類名的前綴
16.提供“全能初始化方法”
- 在類中提供一個(gè)全能初始化方法,并于文檔里指明。其他初始化方法均應(yīng)調(diào)用此方法
- 若全能初始化方法與超類不同,則需覆寫超類中的對(duì)應(yīng)方法
- 如果超類的初始化方法不適用與子類,那么應(yīng)該覆寫這個(gè)超類方法,并拋出異常
Retangle
Square
代碼
結(jié)果
17.實(shí)現(xiàn)description方法
- 實(shí)現(xiàn)description方法返回一個(gè)有意義的字符串
- 若想在調(diào)試時(shí)打印出更詳盡的對(duì)象描述信息,則實(shí)現(xiàn)debugdescription方法
- PS:我一般不會(huì)實(shí)現(xiàn)description方法,而是實(shí)現(xiàn)pr_obj,這樣就不用針對(duì)每個(gè)自定義類實(shí)現(xiàn)description方法
<pre><code>
#define pr(args, ...) NSLog((@"%s(%d):" args),PRETTY_FUNCTION,LINE,##VA_ARGS);
</pre></code>
<pre><code>
#define pr_obj(arg) pr(@"%@",arg);
</pre></code>
代碼
結(jié)果
斷點(diǎn)調(diào)試
18.盡量使用不可變對(duì)象
- 盡量創(chuàng)建不可變對(duì)象
- 盡量把對(duì)外公布的屬性設(shè)置為已讀,并且只在確實(shí)有必要的情況下才將屬性對(duì)外公布
- 不要把可變的collection作為屬性公開,應(yīng)該提供相關(guān)方法修改對(duì)象中的可變collection
19.使用清晰而協(xié)調(diào)的命名方式
- 方法名盡量言簡意賅
- 不要使用str這種簡稱,應(yīng)該使用string這樣的全稱
- BOOL屬性應(yīng)加is或has前綴
20.為私有方法名加前綴
- 給私有方法名加前綴p_,與公共方法區(qū)分開
- 不要單用_作為私有方法名前綴,通常是預(yù)留給蘋果用
21.理解Objective-C錯(cuò)誤模型
只有發(fā)生了使應(yīng)用崩潰的嚴(yán)重錯(cuò)誤才使用NSException
-
錯(cuò)誤不那么嚴(yán)重,可使用NSError
<pre><code>
@interface NSError : NSObject <NSCopying, NSSecureCoding> {@private
void *_reserved;
NSInteger _code;//錯(cuò)誤碼
NSString *_domain;//錯(cuò)誤范圍
NSDictionary *_userInfo;//用戶信息
}
</pre></code>
22.理解NSCopying協(xié)議
- 若想使某個(gè)類支持拷貝功能,只需聲明該類遵循NSCopying協(xié)議,并實(shí)現(xiàn)copyWithZone:方法
- copy:返回的拷貝對(duì)象與當(dāng)前對(duì)象類型一致
- immutableCopy:返回不可變對(duì)象
- mutableCopy:返回可變對(duì)象
- 深拷貝(deep copy):在拷貝對(duì)象自身時(shí),將底層數(shù)據(jù)也一并復(fù)制
- 淺拷貝(shallow copy):只拷貝容器對(duì)象本身,不復(fù)制其中數(shù)據(jù)
- Foundation框架中所有的collection類在默認(rèn)情況下都執(zhí)行淺拷貝