IOSCategory類別和Extension擴充套件

2021-07-10 02:20:35 字數 1902 閱讀 3851

category和extension

一、概述

類別是一種為現有的類新增新方法的方式。

利用objective-c的動態執行時分配機制,category提供了一種比繼承(inheritance)更為簡潔的方法來對class進行擴充套件,無需建立物件類的子類就能為現有的類新增新方法,可以為任何已經存在的class新增方法,包括那些沒有源**的類(如某些框架類)。

二、示例

1、宣告類別

@inte***ce nsstring (categorydemo)

-(nsnumber*) lengthasnumber;

@end 2

、實現類別

@implementation nsstring (categorydemo)

-(nsnumber*) lengthasnumber

@end 3

、呼叫:

nsmutabledictionary *dic =[nsmutabledictionarydictionary];

[dicsetobject: [@"hello"lengthasnumber]forkey:@"hello"];

[dic setobject: [@"world!" lengthasnumber] forkey: @"world"];

nslog(@"%@", dic);

4、列印結果:

2012-07-27 17:43:32.993categorydemo[2193:f803]

三、類別的侷限性

有兩方面侷限性:

(1)無法向類中新增新的例項變數,類別沒有位置容納例項變數。

(2)名稱衝突,即當類別中的方法與原始類方法名稱衝突時,類別具有更高的優先順序。類別方法將完全取代初始方法從而無法再使用初始方法。

四、類別的作用

類別主要有3個作用:

(1)可以將類的實現分散到多個不同檔案或多個不同框架中,方便**管理。也可以對框架提供類的擴充套件(沒有原始碼,不能修改)。

(2)建立對私有方法的前向引用:如果其他類中的方法未實現,在你訪問其他類的私有方法時編譯器報錯這時使用類別,在類別中宣告這些方法(不必提供方法實現),編譯器就不會再產生警告

(3)向物件新增非正式協議:建立乙個nsobject的類別稱為「建立乙個非正式協議」,因為可以作為任何類的委託物件使用。

四、擴充套件

extension

下面是extension和category的語法示例:

// extension

@inte***ce myobject()

-(void)testinextension;// 

類的mainimplementation

不實現的話,有編譯警告。

@end

// category

@inte***ce  myobject(categorydemo)

-(void)testincategory;// 

不強制要求在類的

mainimplementation

中實現@end

// implementation

@implementation myobject //

//-(void)testinextension

////-(void)testincategory

@end

他們的主要區別是: 1

、形式上來看,

extension

是匿名的

category。2

、extension

裡宣告的方法需要在

mainimplementation

中實現,

category

不強制要求。3、

extension

可以新增屬性(變數),

category

不可以。

ios 類別和擴充套件

類別 inte ce classname categoryname methoddeclarations end 注意事項 1 類別是類的擴充套件,只可以宣告方法,不可以宣告變數。並且,類別的方法優先順序較高,可覆蓋原類方法。2 類別的方法中,不可以呼叫super方法。類別的侷限 3 categor...

ios 類別和擴充套件

類別 inte ce classname categoryname methoddeclarations end 注意事項 1 類別是類的擴充套件,只可以宣告方法,不可以宣告變數。並且,類別的方法優先順序較高,可覆蓋原類方法。2 類別的方法中,不可以呼叫super方法。類別的侷限 3 categor...

類別(分類)和 類拓展

一 分類 類別 作用 擴充套件已有類的功能 1 分類是原來的類增加方法 2 在方法內部可以訪問原有類的成員變數 定義標頭檔案中 步驟 1 為原有類建立乙個分類 2 在分類中增加新的方法的宣告和實現 注意點 1 分類中不能擴充套件原有類的成員變數 2 property在分類中只能生成getter se...