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