Objective C中的類目和延展

2021-08-15 12:20:13 字數 1403 閱讀 9095

類目:(類別)category為已知的類增加新的方法;

延展:(extension)通知在本類的定義裡使用類目來宣告私有方法;

1.類目方法的應用:

對現有類進行擴充套件:比如:可以擴充套件cocoa touch框架中的類,在類目中增加的方法會被子類繼承,而且在執行時跟其他的方法沒有區別。

作為子類的替代手段:不需要定義和使用乙個子類,可以通過類目直接向已有的類裡增加方法。

對類中的方法歸類:利用category把乙個龐大的類劃分為小塊來分別進行開發,從而更好地對類中的方法進行更新和維護。

2.類目方法的侷限性:

無法向類目中新增新的例項變數,類目沒有位置來容納例項變數。如果想增加類的例項變數,只能通過定義子類的方式。

如若,在類目中覆蓋先後類的方法。這樣會引起super訊息的斷裂,因為類目總的方法具有更高的優先順序,因此,一般不要覆蓋現有類中的方法。

3.類目的定義:

類目的命名規則:類名+擴充套件方法,如「nsstring+revert」。 類目的介面宣告與類的定義十分相似,但類目不繼承父類,只需要帶有乙個括號,表明該類目的主要用途。

nsstring+revert.h檔案:

#import 

@inte***ce

nsstring (revert)

- (void)test;

@end

nsstring+revert.m檔案:

#import "nsstring+revert.h"

@implementation

nsstring (revert)

- (void)test

@end

類的延展可以看作是一種匿名的類目,類有時需要一些只為自己所見,所用的私有方法這種私有方法可以通過延展的方式來宣告,延展中定義的方法在類本身的@implementation**區域中進行實現。

@inte***ce

myobject : nsobject

- (nsnumber *)number;

@end

@inte***ce

myobject (setter)

- (void)setnumber:(nsnumber *)newnumber;

@end

@implementation

myobject

- (nsnumber *)number

- (void)setnumber:(nsnumber *)newnumber

@end

當在定義延展的時候不提供類目名時,延展中定義的方法既被視為「必須實現」的api在這種情況下,如果方法缺少實現**,則編譯器會報警告,此時方法的實現必須出現在類主體的@implementation**塊中。

Objective C中的類目和延展

類目 為已知的類增加新的方法 延展 通知在本類的定義裡使用類目來宣告私有方法 b 一 類目 b 1.類目方法的應用 list 對現有類進行擴充套件 比如 可以擴充套件cocoa touch框架中的類,在類目中增加的方法會被子類繼承,而且在執行時跟其他的方法沒有區別。作為子類的替代手段 不需要定義和使...

Objective C中的類目和延展

類目 為已知的類增加新的方法 延展 通知在本類的定義裡使用類目來宣告私有方法 b 一 類目 b 1.類目方法的應用 list 對現有類進行擴充套件 比如 可以擴充套件cocoa touch框架中的類,在類目中增加的方法會被子類繼承,而且在執行時跟其他的方法沒有區別。作為子類的替代手段 不需要定義和使...

objective c延展類目協議

objective c中提供了可以讓我們擴充套件類定義的手段 類目,延展和協議。類目 為已知的類增加新的方法 延展 通知在本類的定義裡使用類目來宣告私有方法 協議 協議宣告了可以被任何類實現的方法。注意 這些手段只能增加類的方法,並不能用於增加例項變數,要增加類的例項變數,只能通過定義子類來間接實現...