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];
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