国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

淺析Objective-C中分類Category的使用

2019-10-21 18:55:50
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了淺析Objective-C中分類Category的使用,使用Category對類進行擴展可以訪問原始類的實例變量,需要的朋友可以參考下
 

無論一個類設計的如何完美,都不可避免的會遇到沒有預測到的需求,那怎么擴展現有的類呢?當然,繼承是個不錯的選擇。但是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的實現文件中的實例方法只要你不去調用它你可以不用實現所有聲明的所有方法。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳春市| 漳州市| 阳新县| 伊宁市| 二手房| 长海县| 平塘县| 深水埗区| 汤原县| 高台县| 宁晋县| 南乐县| 诸城市| 深泽县| 伊春市| 宜兰县| 格尔木市| 凤凰县| 芜湖县| 遂平县| 渝北区| 怀仁县| 禹城市| 信阳市| 德庆县| 昭通市| 海南省| 灌南县| 恩平市| 宜兰市| 叶城县| 隆尧县| 堆龙德庆县| 虎林市| 古丈县| 沧源| 朔州市| 梁河县| 安阳县| 巩留县| 雷山县|