第三章 接口與API設(shè)計(jì)
1.Objective-C沒有命名空間,所以在命名上最好加上前綴以減小沖突的可能点晴,前綴建議采用三個(gè)字母(蘋果保留使用所有兩個(gè)字母前綴的權(quán)利)趴久。在開發(fā)自己的類庫時(shí)如果用了其他第三方類庫赌蔑,最好將第三方類庫也加上前綴俯在,這樣可以讓使用者使用你的類庫的同時(shí)也用你的類庫中用到第三方類庫(有點(diǎn)繞. . .)。
2.覆寫description
方法娃惯,打印出一些有用信息幫助調(diào)試跷乐。
3.封裝一個(gè)對象時(shí),對外公開屬性最好是只讀(readonly
)的趾浅,如果要在內(nèi)部修改可在對象內(nèi)部重新聲明為readwrite愕提。這種模式在AFNetworking有著大量的應(yīng)用。
4.私有方法最好加上前綴(p_ )潮孽,前綴不要只用一個(gè)下劃線(_)揪荣,這種做法是蘋果預(yù)留的。
5.容器類對象默認(rèn)執(zhí)行的是淺拷貝往史,若要執(zhí)行深拷貝需要自己編寫相關(guān)方法。
第四章 協(xié)議與分類
1.委托屬性常用weak來修飾佛舱;一個(gè)協(xié)議里的方法是optional
的椎例,需要先判斷委托對象是否實(shí)現(xiàn)改方法挨决,如果經(jīng)常需要判斷則可考慮做個(gè)緩存。
2.weak
和unsafe_unretain
的區(qū)別是前者在相關(guān)對象銷毀時(shí)需要自動(dòng)清空订歪,后者則不需要脖祈。
3.分類中不要添加屬性,必須添加的話可以采用關(guān)聯(lián)對象機(jī)制模擬刷晋,不推薦盖高。分類的設(shè)計(jì)初衷是擴(kuò)展類的功能,而屬性是用于數(shù)據(jù)的封裝眼虱,因此喻奥,屬性最好定義在主接口中。
4.class-continuation
分類(在其他地方看到過叫匿名分類)捏悬,這本書多次提到了這個(gè)概念撞蚕,對應(yīng)的部分是:
//SonClass.h
@interface SonClass : FatherClass
@end
//SonClass.m
@interface SonClass()
{
//class-continuation分類
}
@end
5.class-continuation
分類可以用來隱藏實(shí)現(xiàn)細(xì)節(jié),如系統(tǒng)的WebKit其實(shí)大部分是C++編寫的过牙,但是對外展示的卻是一套整潔的Objective-C接口甥厦。
6.匿名對象,常見的有:
@property (nonatomic, weak) id<MyDelegate> delegate;
這句話的意思是delegate遵循MyDelegate協(xié)議寇钉,至于它本身是什么類不關(guān)心刀疙。匿名分類也可以用來對一些第三方類庫進(jìn)行一些簡單封裝:
@protocol MyDatabaseConnection
-(void)connect;
-(void)disconnect;
-(BOOL)isConnected;
-(NSArray *)performQuery:(NSString*)query;
@end
//使用
@ protocol MyDatabaseConnection;
@interface MyDatabaseManager : NSObject
+sharedInstance;
-(id<MyDatabaseConnection>)connectionWithIdentifier:(NSString*)identifier;
@end
這里隱藏了數(shù)據(jù)庫連接所用的類(可能來自不同框架),而且在后續(xù)中扫倡,無需改變公共API庙洼,就能切換后端實(shí)現(xiàn)類。
6.關(guān)于匿名分類的一個(gè)面試題:
/*
`id`镊辕、`id<NSObject>`油够、`NSObject`的區(qū)別
`NSObject`:就是用來定義`NSObject`對象的。
`id`:它就是一個(gè)指針征懈,它可以指向的類型不僅限于`NSObject`石咬,如`NSProxy`。
`id<NSObject>`:它指向的對象要求實(shí)現(xiàn)`NSObject`所實(shí)現(xiàn)的協(xié)議卖哎,所以說它可以定義`NSObject`鬼悠、`NSProxy`(它也實(shí)現(xiàn)了`<NSObject>`)或者其他實(shí)現(xiàn)了`<NSObject>`的對象。
*/