淺談Category的三種使用方法

OC是一門面向對象的開發語言,這是OC與C最大的區別,在面向對象開發中,我們需要創建很多的類,這些類一旦數量多起來,我們要添加一些屬性或方法的時候很不方便,寫着寫着自己有時候都蒙了,於是我們提出了Category,Category 是類的 一種擴展方式,通過Category可以給已經寫好的類添加方法或屬性,已經寫好的類我們一般是不能動的 ,所以要採取Category 的方式。

Category 有三種形式:

1.分類 (給類擴充方法  和 進行分組開發)

2.擴展  (Extension)

3.非正式協議 (現在不常用) 

1.Category 與 分類

分類表現在兩個方面 :1.擴展原有類的方法   2.分組開發

在使用的時候 一般會創建一個 Category類型 的 .h和.m文件

(右鍵 -->New File-->Objective -C File --> fileType選擇Category)

1>擴展原有類的方法:(只能添加方法 不能添加屬性)

語法形式 包括@interface 和@implementation 兩部分  如下:

@interface 類名 (Category的名)

方法的聲明

@end

@implementation 類名 (Category的名)

方法的實現

@end

這樣寫好Category後 類就擁有了新添加的方法 

字符串有一個逐個獲取自身字符的方法

獲取的字符類型是unichar類型

NSString *phone = @"12345678909";

unichar ch = [phone characterAtIndex:0];

此時獲取的 ch 就是 1

 

2>分組開發

就是將一個類 使用Category 進行分組開發


2.Category 與 擴展

由於Category只能給已有的類添加方法,不能添加屬性 

要想添加屬性  就要用 擴展 Extension

( 右鍵  --> New File  -->  Objective-C  File  -->  fileType 選擇  Extension )

Extension的語法:

@interface 類名 () {

    要添加的屬性

}

要添加的方法

@end


注意 類名後面的()中 是空的 沒有任何東西

Extension創建出來以後只有一個.h文件(只有interface 不需要implementation),所以說在擴展裏面只寫  要添加方法和屬性的聲明  實現寫在類的.m文件中  類的.h中不需要  再對新添加的類和方法進行聲明,事實上 ,擴展一般作爲私有擴展使用 (不去創建Extension文件) 寫在類的.m文件裏面


3.Category 與 非正式協議

1>非正式協議就是一個 Category 的聲明文件 Category 的.h 文件

2>給一個類提供新的方法的聲明但是沒有實現部分 這個聲明要寫在main函數中

3>Category 中方法的實現留給該類的子類完成 在子類中的.m文件中實現

語法  :

@interface 類名 (非正式協議名)

方法的聲明

@end

例:非正式協議(要聲明一個方法)

@interface NSObject (NSOExt)

- (void)testMethod;

@end

類的聲明部分

@interface Person : NSObject

@end

類的實現部分 在這裏實現非正式協議中的方法

@implementation Person

- (void)testMethod {

  NSLog(@"子類 Person 來實現 父類 NSObject 非正式協議中 的方法");

}

@end





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章