黑馬程序員_OC語言的分類

iOS,Android,Java培訓,期待與您的交流
在開發項目的過程中,有時候需要爲已有的類擴展一些新的行爲,對於這種擴展方式,最容易想到的就是使用繼承。通過繼承,子類可以在父類的基礎上添加新的方法,甚至重寫父類已有的方法。除了繼承之外,分類可以在不改變原來類內容的基礎上,爲類增加一些方法。
1    分類
分類的語法格式爲:
1、分類的聲明:
@interface 類名 (分類名稱)
// 方法聲明
@end
2、分類的實現:
@implementation 類名 (分類名稱)
// 方法實現
@end
在聲明部分,分類只能增加方法,不能增加成員變量;分類方法實現中可以訪問主類中聲明的成員變量。
//Person.h
@interface Person : NSObject
{
    int _age;
}
@property int age;
- (void)test;
@end

//Person.m
@implementation Person
- (void)test
{
    NSLog(@"Person-test");
}
@end

//Persn的分類,Person+JJ.h
@interface Person (JJ)
- (void)test2;
@end

//Persn的分類,Person+JJ.m
@implementation Person (JJ)
- (void)test2 //實現分類中聲明的方法
{ 
    _age = 10; //訪問主類的成員變量 
    NSLog(@"-----test2,age=%d",_age);
}
- (void)test //分類中重新實現主類中的test方法,將會覆蓋主類中的test方法,導致主類的方法無法使用
{ 
    NSLog(@"Person (JJ)-test");
}
@end
如上文的程序所示,分類中重新重新實現主類中的test方法,將會覆蓋主類中的test方法,更特別的時,如果多個分類都重新實現了主類的某一個方法,則該方法將由最後參與編譯的分類調用。即方法調用的優先級:分類(最後參與編譯的分類優先) --> 原來類(主類) --> 父類。
2    分類的應用
分類的應用,給NSString增加一個類方法:計算某個字符串中阿拉伯數字的個數; 給NSString增加一個對象方法:計算當前字符串中阿拉伯數字的個數。
//NSString+Number.h
@interface NSString (Number)

+ (int)numberCountOfString:(NSString *)str;

- (int)numberCount;

@end

//NSString+Number.m
@implementation NSString (Number)


+ (int)numberCountOfString:(NSString *)str
{

    
    return [str numberCount];
}
- (int)numberCount
{
    int count = 0;
    unichar = c = [self characterAtIndex:i];
    for (int i = 0; i='0' && c<='9' )
        {
            count++;
        }
    }
    
    return count;
}

//main.c
int main()
// 類庫:很多類的集合
{
    int count1 = [NSString numberCountOfString:@"54d4df3a43sdf43dasd"];
    
    int count2 = [@"9fdsdffds54df3543" numberCount];
    
    NSLog(@"%d", count1);
    NSLog(@"%d", count2);
    return 0;
}

@end
3    總結
分類的作用:在不改變原來類內容的基礎上,可以爲類增加一些方法
使用注意:
1.分類只能增加方法,不能增加成員變量
2.分類方法實現中可以訪問原來類中聲明的成員變量
3.分類可以重新實現原來類中的方法,但是會覆蓋掉原來的方法,會導致原來的方法沒法再使用
4.方法調用的優先級:分類(最後參與編譯的分類優先) --> 原來類 --> 父類
iOS,Android,Java培訓,期待與您的交流
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章