不管一個類設計的若何完善,都弗成防止的會碰到沒有猜測到的需求,那怎樣擴大現有的類呢?固然,繼續是個不錯的選擇。然則Objective-C供給了一種特殊的方法來擴大類,叫Catagory,可以靜態的為曾經存在的類添加新的行動。如許可以包管類的原本來的基本上,較小的修改便可以增長須要的功效。應用Category對類停止擴大時,不須要拜訪其源代碼,也不須要創立子類,如許我們可以擴大體系供給的類。Category應用簡略的方法,完成了類的相干辦法的模塊化,把分歧的類辦法分派到分歧的分類文件中。
應用Object-C中的分類Category,是一種編譯時的手腕,許可我們經由過程給一個類添加辦法來擴大它(然則經由過程category不克不及添加新的實例變量),而且我們不須要拜訪類中的代碼便可以做到,這點和JavaScript中應用原型來界說屬性有點相似。
我們可認為一個類創立一個新的辦法,而不須要在代碼中編纂類界說。
上面就是界說並應用分類的例子法式,經由過程上面代碼,我們可以給Object-C中的NSString 添加camelCaseString分類,應用camelCaseString辦法,便可以去失落一個字符串中的空格,並將原有空格後的單詞改寫成年夜寫(行將字符串轉化為駝峰式)。
經由過程一個簡略的例子看看Category若何應用。
#import <Foundation/Foundation.h>
/*
界說分類的進程年夜致可分為以下幾個步調:
第一步、創立一個帶有接口的新文件,即創立已有類
第二步、在新文件中添加須要擴大的辦法及辦法的完成,即須要添加的分類
*/
//NSString 表現將要添加分類的類稱號,該類必需是已存在的。
//CamelCase 是為類添加的辦法稱號。
//只能添加辦法,不克不及添加變量。
//頭文件定名通例:ClassName+CategoryName.h
@interface NSString (CamelCase)
-(NSString*) camelCaseString;
@end
@implementation NSString (CamelCase)
-(NSString*) camelCaseString
{
//挪用NSString的外部辦法獲得駝峰字符串。
//self指向被添加分類的類。
NSString *castr = [self capitalizedString];
//創立數組來過濾失落空格, 經由過程分隔符對字符停止組合。
NSArray *array = [castr componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
//把數組的字符輸入
NSString *output = @"";
for(NSString *word in array)
{
output = [output stringByAppendingString:word];
}
return output;
}
@end
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *str = @"My name is bill.";
NSLog(@"%@", str);
str = [str camelCaseString];
NSLog(@"%@", str);
[pool drain];
return 0;
}
那Category的應用場景有那些呢:
1、類包括了許多個辦法完成,而這些辦法須要分歧團隊的成員來完成
2、當你在應用基本類庫中的類時,你不想繼續這些類而只想添加一些辦法時。
Category能完成下面的需求,固然也有應用Category是須要留意的成績:
1、Category可以拜訪原始類的實例變量,但不克不及添加實例變量,假如想添加變量,那就經由過程繼續創立子類來完成。
2、Category可以重載原始類的辦法,不年夜不推舉這麼做,如許會籠罩失落原始類的辦法。假如確切要重載,那就經由過程繼續創立子類來完成。
3、和通俗接口有所差別的是,在Category的完成文件中的實例辦法只需你不去挪用它你可以不消完成一切聲明的一切辦法。
【淺析Objective-C平分類Category的應用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!