之前看到一個面試題:在ios中坪创,重寫一個類的方式用繼承好還是分類好响谓?
首先看看類別和繼承的概念:
類別(Category):簡單說來目的是為擴展一個類的方法,但是我們知道無法擴展屬性验庙,必要的時候只能通過runtime特性來動態(tài)添加垫卤。
繼承(inherit):一個類(子類)繼承于另一個類(父類),那么子類不僅擁有父類所有的屬性和方法肝谭,而且可以創(chuàng)建屬于自己的屬性和方法掘宪。通常作為我們的基類存在蛾扇,以供子類可以任意調(diào)用通用的方法或是屬性。
題目說到重寫一個類的方法添诉,我們知道在類別中添加和原類中相同名稱的方法會覆蓋原有的方法實現(xiàn)(類別中無法調(diào)用super),所以對于重寫類方法最好還是繼承屁桑,在調(diào)用super實現(xiàn)原類中的方法基礎上,再擴展自己的方法實現(xiàn)栏赴。
以上針對于文章最開始提到的重寫蘑斧,回到標題,為類擴展方法按理說類別和繼承都可以采用须眷,但是要視具體情況進行選擇竖瘾。
若是單純?yōu)橐粋€類擴展不同于原有的方法時,最好采用的還是類別(注意在方法前面加上獨有的前綴花颗,主要預防命名相同而造成覆蓋的情況)捕传。應用點主要有:
1.方便快捷。繼承必須保證a from b才能擁有b的方法扩劝,類別只需要b has a 就擁有擴展的方法庸论。
2.降低耦合性,代碼可維護性棒呛,與原有的類分開管理聂示。
3.有利于將同一個類的同一方法擴展到不同文件里面取,也利于多人開發(fā)中直接調(diào)用簇秒。
4.系統(tǒng)類NSString鱼喉、NSArray等類提倡用類別,不會對其他類產(chǎn)生影響趋观。