三、接口與API設(shè)計(jì)
15.用前綴避免命名空間沖突
選擇與公司、應(yīng)用程序或二者皆有關(guān)聯(lián)之名稱作為類名的前綴,并在所有代碼中均使用這一前綴转质。
若自己所在開發(fā)的程序庫中用到了第三方庫,則應(yīng)為其中的名稱加上前綴帖世。
16.提供“全能初始化方法”
1.在類中提供一個(gè)全能初始化方法休蟹,其他初始化方法均應(yīng)調(diào)用此方法。
2.若全能初始化方法與超類不同日矫,則需覆寫超類中的對應(yīng)方法赂弓。
3.如果超類的初始化方法不適用與子類,那么應(yīng)該覆寫這個(gè)超類方法哪轿,并在其中拋出異常盈魁。
17.實(shí)現(xiàn)description方法
打印對象信息時(shí),常用的做法是
NSLog(@"object = %@",object);
object對象會受到description消息窃诉,該方法所返回的描述信息將取代%@杨耙,比如object是數(shù)組,那么會打印出數(shù)組的元素飘痛,但如果是自定義的類珊膜,只會輸出對象的地址,如果我們想輸出更多有用的信息敦冬,則需要覆寫description方法。
-(NSString *)description{
return [NSString stringWithFormat:@"<%@:%p,\"%@ %@"\>",[self class],self,_firstName,_lastName];
}
使用“po”來打印對象唯沮,可實(shí)現(xiàn)debugDescription方法脖旱。
18.盡量使用不可變對象
1.盡量創(chuàng)建不可變的對象。
2.若某屬性僅可用于對象內(nèi)部修改介蛉,則在“class-continuation分類”中將其由readonly屬性擴(kuò)展為readwrite屬性萌庆。
3.不要把可變的collection作為屬性公開,而應(yīng)提供相關(guān)方法币旧,以此修改對象中的可變collection践险。
19.使用清晰而協(xié)調(diào)的命名方式
1.起名遵從標(biāo)準(zhǔn)的OC命名規(guī)范,如“駝峰式大小寫命名法”。
2.方法名要言簡意賅巍虫,且不能使用縮略后的類型名稱彭则。
3.確保命名風(fēng)格與自己的代碼或所要集成的框架相符。
20.為私有方法名加前綴
給私有方法的名稱加上前綴占遥,這樣可以很容易地將其與公共方法區(qū)分開來俯抖。
-(void)p_privateMethod;
21.理解Objective-C錯誤模型
1.只有發(fā)生了可使整個(gè)應(yīng)用程序崩潰的嚴(yán)重錯誤時(shí),才應(yīng)使用異常瓦胎。
2.在錯誤不那么嚴(yán)重的情況下芬萍,可以使用delegate方法來處理錯誤,也可以把錯誤信息放在NSError對象里搔啊,經(jīng)由“輸出參數(shù)”返回給調(diào)用者柬祠。
22.理解NSCopying協(xié)議
如果想令自己的類支持拷貝操作,那么就要實(shí)現(xiàn)NSCopying協(xié)議负芋,協(xié)議只有一個(gè)方法:
-(id)copyWithZone:(NSZone *)zone
copy方法由NSObject實(shí)現(xiàn)漫蛔,該方法只是以“默認(rèn)區(qū)”為參數(shù)來調(diào)用“copyWithZone”。
若想使某個(gè)類支持拷貝功能示罗,只需聲明該類遵從NSCopying協(xié)議惩猫,并實(shí)現(xiàn)其中的方法即可。
同理蚜点,如果想對其深拷貝轧房,就要實(shí)現(xiàn)NSMutableCopy協(xié)議。
一般情況下應(yīng)該盡量執(zhí)行淺拷貝绍绘,如果需要深拷貝奶镶,那么可考慮新增一個(gè)專門執(zhí)行深拷貝的方法。