黑馬程序員---OC學習筆記之分類(Catgory)的概念及使用

------Java培訓、Android培訓、iOS培訓、.Net培訓--------

1、分類的概念

在不改變原有類的情況下,給原有類添加方法

【Category】是OC特有的語法,其他語言沒有。類似於C#中的擴展方法和partial關鍵字。

【實質】一些方法的聲明和實現

2、作用

1)在不修改原有類的基礎上增加新的方法

2)一個龐大的類可以分模塊開發

3)一個龐大的類可以有多個人來編寫,更利於團隊合作

 

3、使用分類的目的

1)對現有類進行擴展

 

2)作爲子類的替代手段

不需要定義和使用一個子類,可以通過類別直接想已有的類增加方法

3)對類中的方法歸類

利用category把一個龐大的類劃分爲小塊進行開發,從而更好的對類中的方法進行更新和維護。

 

4、使用分類的步驟

先聲明分類-->實現分類--->使用分類

【注意】分類的命名規則:類名+擴展方法:如:“NSString+countNum

分類的接口聲明與類的定義十分相似,但分類不繼承父類,只需要帶有一個括號,表明該分類的主要用途。

【聲明一個分類】

格式:

@interface 待擴展類名 (分類名稱)

【實現分類】

@implementation 待擴展類名 (分類名稱)

【調用類別中的方法】

與一般成員方法調用形式完全一樣。【需要包含類別的頭文件】


5、使用注意事項

1、分類只能增加方法方法,不能增加成員變量

1)在分類中不能聲明實例變量

2)也不能使用@property

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

3、如果分類中方法與原類中方法同名,優先調用分類中方法

4、在多個類別中有同名的方法時,【執行最後編譯的那個類別中的同名方法】


6、分類使用舉例

Person.h文件內容】

#import <Foundation/Foundation.h>
#pragma mark Person 類聲明部分
@interface Person : NSObject{
    int _age;
    NSString *_name;
}
@property(nonatomic,assign) int age;
@property(nonatomic,strong) NSString *name;
-(void) eat;
 
@end


Person+base.h文件內容】

#pragma mark Person  分類聲明部分
 
@interfacePerson(base)
 
//int sex;//這樣會在編譯時報錯
//@property int sex;//編譯時不報錯,但是使用sex時會報錯(如p.sex = 1),找不到setSex方法
 
//聲明擴展的方法
-(void) eat;
 
-(void)run;
@end


 

Person.m文件內容】

 #pragma mark Person  類實現部分
@implementation Person
-(void) eat{
    NSLog(@"Person eat food....");
}
@end
 


Person+base.m文件內容】

 

#pragma mark Person  分類實現部分
@implementation Person(base)
-(void)eat{
    //分類中可以調用原類中的成員變量
    NSLog(@"%@ eat food....",self.name);
}
 
-(void)run{
    NSLog(@"%@ run....",self.name);
}
@end
 


 

main.m文件內容】

#import "Person.h"
#import "Person+base.h" //分類頭文件也要引入
int main(int argc, const char * argv[])
{
 
    @autoreleasepool {
        Person *p = [Person new];
        p.name = @"Amos";
        //Person類對象可以調用分類中的方法,就跟調用原有類中的一樣
        [p run];
        //Person類與其分類中有同名方法,優先調用分類中的方法
        [p eat];
 
   }
    return 0;
}


 

【打印結果】

2015-10-07 09:54:09.439 加強02[616:303] Amos run....

2015-10-07 09:54:09.441 加強02[616:303] Amos eatfood....



發佈了65 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章