分類和類擴充套件

2021-07-23 18:51:43 字數 1454 閱讀 7634

分類(category) 和 類擴充套件(extension) 

分類(category)

1、給已經存在的類增加方法(可以不實現),不能增加成員變數(可以通過runtime來給分類新增屬性)

2、分類可以訪問原來類中的成員變數

3、如果分類和原來的類出現同名的方法,優先呼叫分類中的方法     優先順序是:分類 (最後參與編譯) -> 原來類 -> 父類

4、分類可以重新實現原來類中的方法,但是會覆蓋掉原來類方法,導致原來類的方法無法使用

優點: 1、減少單個檔案的體積   2、把不同的功能組織到不同的category 中,方便多個開發者完成乙個類  3、宣告私有方法   4、模仿多繼承等

通過執行時給分類新增屬性:

@inte***ce nsobject (specialname)

@property (nonatomic, copy) nsstring *specialname;

@end

#import "nsobject+extension.h"

#import static const void *specialnamekey = &specialnamekey;

@implementation nsobject (specialname)

@dynamic specialname;

- (nsstring *)specialname

- (void)setspecialname:(nsstring *)specialname

@end

類擴充套件(extension)

1、類擴充套件是分類的乙個特例(extension 是 category 的乙個特例) ,也稱作匿名分類

2、可以給類新增成員屬性,但是是私有變數

3、可以給類新增方法,也是私有方法 (新增的方法一定要實現,category 中的方法可以不實現)

4、一般情況下,extension 是放在.m檔案的@implementation 的上方

注:extension 中的方法必須在@implementation中實現,否則會編譯出錯

分類(category) 和 類擴充套件(extension) 的區別:

extension:

1、在編譯期間決議,是類的一部分,在編譯器和標頭檔案的@inte***ce和實現檔案裡的@implement一起形成乙個完整的類

2、伴隨著類的產生而產生,也隨著類的消失而消失

3、extension 一般用來隱藏類的私有資訊,必須有乙個類的原始碼才能新增乙個類的extension ,所以對於系統的類,是無法新增類擴充套件

category:

1、是執行時決議的

2、類擴充套件可以新增例項變數,分類不能新增例項變數,因為在執行時期間,物件的記憶體布局已經確定,如果新增例項變數會破壞類的內部布局

iOS 繼承 分類和類擴充套件

繼承是指乙個新類擁有被繼承類 父類 的全部屬性和方法。例如,只有繼承nsobject,才有建立物件的能力。nsobject是大部分類的基類 根類,root class 當a類繼承b類,a類就擁有b類中所有成員變數 屬性 和方法。這也是繼承的主要目的。使用場景 當我們可以說通b是乙個a時,就可以使用b...

類擴充套件與分類

類擴充套件與分類 建立日期 2016.5.12 類擴充套件可以新增方法與屬性 下面為uiview的類擴充套件 inte ce uiview uiviewhierarchy property nullable,nonatomic,readonly uiview superview property n...

31 oc分類和類擴充套件

分類基本概念 書寫category的格式 分類的宣告 inte ce classname categoryname newmethod 在類別中新增方法 不允許在類別中新增變數 end classname 需要給哪個類擴充方法 categoryname 分類的名稱 newmethod 擴充的方法 分...