+ (void)load與+ (void)initialize的區(qū)別:
+ (void)load:當類加載進內(nèi)存的時候調(diào)用进统,而且不管有沒有子類,都只會調(diào)用一次浪听,在main函數(shù)之前調(diào)用螟碎,用途:
1:可以新建類在該類中實現(xiàn)一些配置信息
2:runtime交換方法的時候,因為只需要交換一次方法迹栓,所有可以在該方法中實現(xiàn)交換方法的代碼掉分,用于只實現(xiàn)一次的代碼
+ (void)initialize:當類被初始化的時候調(diào)用,可能會被調(diào)用多次克伊,若是沒有子類酥郭,則只會調(diào)用一次,若是有子類的話愿吹,該方法會被調(diào)用多次不从,若是子類的繼承關(guān)系,先會調(diào)用父類的+ (void)initialize方法犁跪,然后再去調(diào)用子類的+ (void)initialize方法(若是繼承關(guān)系椿息,調(diào)用某個方法的時候歹袁,先會去父類中查找,若是父類中沒有方法的實現(xiàn)就去子類中查找) 用途:
1:在設(shè)置導(dǎo)航欄的全局背景的時候寝优,只需要設(shè)置一次条舔,可以重寫該方法設(shè)置,最好是在該方法判斷子類倡勇,若是自己逞刷,則實現(xiàn)設(shè)置全局導(dǎo)航欄的方法,若不是自己則跳過實現(xiàn)妻熊。
2:在創(chuàng)建數(shù)據(jù)庫代碼的時候夸浅,可以在該方法中去創(chuàng)建,保證只初始化一次數(shù)據(jù)庫實例扔役,也可以用dispatch或是懶加載的方法中初始化數(shù)據(jù)庫實例帆喇,也能保證只初始化一次數(shù)據(jù)庫實例。其中也可以在+ (void)initialize方法中用dispatch也能保證即使有子類也只會初始化一次