關於分類category與類擴展extension的區別

分類category:即使在你不知道一個類的源碼情況下,向這個類添加擴展的方法,並且分類的實現是和其他文件分開的。

#import "Man+SuperMan.h"

@implementation Man (SuperMan)//括號裏代表的是分類category的名字

-(void)fly

{

    NSLog(@"超人起飛了");

}

分類在此的意思是對於Man這個類,在此處添加的方法時額外的,而不是新開的一個類,你不可以在分類的實現文件中爲這個類添加額外的成員變量而在分類文件中,可以通過關鍵字self去調用原類Man的方法,也可以訪問原類的成員變量即使是私有的。而當分類中的方法和原類中的方法同名時,調用時,調用的是分類的方法,相當於分類的方法覆蓋了原類的方法。這又提醒我們,命名方法的時候,一定不要與原類的方法重名。

類擴展(extension):

1.寫法上與category有些許區別,不需要寫分類名,也就是我們所說匿名類;

2.類擴展的聲明必須在@implementation中實現,也就是說,沒有@implementation的類,例如:framework class是不能使用extension的

3.extension可以爲原類提供新的方法的同時同樣是可以爲原有的類添加成員變量,這也就是類擴展比分類好的地方,早在xcode4之後,就已經建議在自定義類的.m文件中使用類擴展,這樣能夠很好的保證代碼的良好的封裝性,進一步避免私有接口的外露。

4.類擴展新增的方法只作用於原類,而不會作用於原類中的子類。




發佈了37 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章