分類作用
分類:可以給某一個類擴充一些方法(不修改原來類的代碼)
格式
// 聲明
@interface Person (分類名稱)
@end
// 實作
@implementation Person (分類名稱)
@end
好處
- 一個龐大的類可以分子產品開發
- 一個龐大的類可以由多個人來編寫,更有利于團隊合作
給系統自帶的類添加分類
- 給 NSString 添加一個類方法,計算某個字元串中阿拉伯數字的個數
- 給 NSString 添加一個對象方法,計算目前字元串中的阿拉伯數字的個數
#import <Foundation/Foundation.h>
@interface NSString (YZ)
// 增加一個類方法計算某個字元串内部英文字母的個數
+ (int)zimuCountOfStr:(NSString *)str;
// 增加一個對象方法計算目前字元串内部英文字母的個數
- (int)zimuCount;
// 增加一個類方法比較兩個字元串的長度,傳回長度差
+ (int)compareLengthBetweenStr1:(NSString *)str1 andStr2:(NSString *)str2;
// 增加一個對象方法和其他字元串比較長度,傳回長度差
- (int)compareLengthWithOther:(NSString *)other;
@end
#import "NSString+YZ.h"
@implementation NSString (YZ)
// 增加一個類方法計算某個字元串内部英文字母的個數
+ (int)zimuCountOfStr:(NSString *)str
{
return [str zimuCount];
}
// 增加一個對象方法計算目前字元串内部英文字母的個數
- (int)zimuCount
{
// 1.定義變量記錄字母的個數
int count = ;
for (int i = ; i<self.length; i++)
{
// 2.取出每一個字元
unichar c = [self characterAtIndex:i];
// 3.如果字元是英文字母
if ( (c>='a' && c<='z') || (c>='A' && c<='Z') )
{
count++;
}
}
return count;
}
// 增加一個類方法比較兩個字元串的長度,傳回長度差
+ (int)compareLengthBetweenStr1:(NSString *)str1 andStr2:(NSString *)str2
{
return [str1 compareLengthWithOther:str2];
}
// 增加一個對象方法和其他字元串比較長度,傳回長度差
- (int)compareLengthWithOther:(NSString *)other
{
// self.length傳回的是NSUInterger類型,轉成int就不會有警告
return (int)(self.length - other.length);
}
@end
注意事項
- Category 可以通路原始類的執行個體變量,但不能添加變量,隻能添加方法,如果想添加變量,可以考慮通過繼承和建立子類
- Category 可以實作原始類的方法,但不推薦這麼做,因為它是直接替換掉原來的方法,這麼做的後果是再也不能通路原來的方法
- 多個 Category 中如果實作了相同的方法,隻有最後一個參與編譯的才會有效
- 方法調用的優先級:分類(最後參與編譯的分類優先) –> 原來類 –> 父類
新部落格文章位址:Category 分類、類别 總結