iOS分類(類別)的注意點

1.分類只能增加方法(包括類方法和對象方法),不能增加成員變量

2.在分類方法的實現(xiàn)中可以訪問原來類中的成員變量;

3.分類中可以重新實現(xiàn)原來類中的方法,但是會覆蓋掉原來的方法(+load除外),導致原來的方法無法再使用(警告);
著重說下這個,盡量不要在分類中重寫原類的方法,理由如下:
(1)、category沒有辦法去代替子類,它不能像子類一樣通過super去調用父類的方法實現(xiàn)。如果category中重寫覆蓋了當前類中的某個方法,那么這個當前類中的原始方法實現(xiàn),將永遠不會被執(zhí)行,這在某些方法里是致命的,但是如果子類實現(xiàn)了該方法,則子類的方法會覆蓋掉分類和父類。(ps:這里提一下,+(void)load方法是一個特例,它會在當前類執(zhí)行完之后再在category中執(zhí)行。)

+(void)load方法,執(zhí)行順序:先調用父類,再調用子類,最后調用分類。

其他方法執(zhí)行順序:有子類則只執(zhí)行子類,沒有子類則只執(zhí)行分類。

(2)、同時,一個category也不能可靠的覆蓋另一個category中相同的類的相同的方法。例如UIViewController+A與UIViewController+B,都重寫了viewDidLoad,我們就無法控制誰覆蓋了誰。
(3)、通過觀察頭文件我們可以發(fā)現(xiàn),Cocoa框架中的許多類都是通過category來實現(xiàn)功能的,可能不經(jīng)意間你就覆蓋了這些方法中的其一,有時候就會產(chǎn)生一些無法排查的異常原因。
(4)、category的誕生只是為了讓開發(fā)者更加方便的去拓展一個類,它的初衷并不是讓你去改變一個類。
結論:
當我們需要重寫方法時,首推通過子類重寫父類的方法,在一些不方便重寫的情況下,我們也可以在category中用runtime進行method swizzling(方法的偷梁換柱)來實現(xiàn)。

4.方法調用的優(yōu)先級:分類->原來的類->父類,若包含有多個分類,則最后參與編譯的分類優(yōu)先;

5.在很多的情況下,往往是給系統(tǒng)自帶的類添加分類,如NSObject和NSString,因為有的時候,系統(tǒng)類可能并不能滿足我們的要求。

6.在大規(guī)模的應用中,通常把相應的功能寫成一個分類,可以有無限個分類,對原有類進行擴充,一般分模塊寫,一個模塊一個分類。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容