欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年03月01日 09:06:43   作者:yhawaii的喃喃自語  
這篇文章主要介紹了淺析Objective-C中分類Category的使用,使用Category對(duì)類進(jìn)行擴(kuò)展可以訪問原始類的實(shí)例變量,需要的朋友可以參考下

無論一個(gè)類設(shè)計(jì)的如何完美,都不可避免的會(huì)遇到?jīng)]有預(yù)測到的需求,那怎么擴(kuò)展現(xiàn)有的類呢?當(dāng)然,繼承是個(gè)不錯(cuò)的選擇。但是Objective-C提供了一種特別的方式來擴(kuò)展類,叫Catagory,可以動(dòng)態(tài)的為已經(jīng)存在的類添加新的行為。這樣可以保證類的原原來的基礎(chǔ)上,較小的改動(dòng)就可以增加需要的功能。使用Category對(duì)類進(jìn)行擴(kuò)展時(shí),不需要訪問其源代碼,也不需要?jiǎng)?chuàng)建子類,這樣我們可以擴(kuò)展系統(tǒng)提供的類。Category使用簡單的方式,實(shí)現(xiàn)了類的相關(guān)方法的模塊化,把不同的類方法分配到不同的分類文件中。
使用Object-C中的分類Category,是一種編譯時(shí)的手段,允許我們通過給一個(gè)類添加方法來擴(kuò)充它(但是通過category不能添加新的實(shí)例變量),并且我們不需要訪問類中的代碼就可以做到,這點(diǎn)和javascript中使用原型來定義屬性有點(diǎn)類似。
我們可以為一個(gè)類創(chuàng)建一個(gè)新的方法,而不需要在代碼中編輯類定義。
下面就是定義并使用分類的例子程序,通過下面代碼,我們可以給Object-C中的NSString 添加camelCaseString分類,使用camelCaseString方法,就可以去掉一個(gè)字符串中的空格,并將原有空格后的單詞改寫成大寫(即將字符串轉(zhuǎn)化為駝峰式)。
通過一個(gè)簡單的例子看看Category如何使用。

復(fù)制代碼 代碼如下:

#import <Foundation/Foundation.h> 
 
/*
定義分類的過程大致可分為以下幾個(gè)步驟:
    第一步、創(chuàng)建一個(gè)帶有接口的新文件,即創(chuàng)建已有類
 
    第二步、在新文件中添加需要擴(kuò)展的方法及方法的實(shí)現(xiàn),即需要添加的分類
 */ 
//NSString 表示將要添加分類的類名稱,該類必須是已存在的。 
//CamelCase 是為類添加的方法名稱。 
//只能添加方法,不能添加變量。 
//頭文件命名慣例:ClassName+CategoryName.h 
@interface NSString (CamelCase) 
 
-(NSString*) camelCaseString; 
 
@end 
 
@implementation NSString (CamelCase) 
 
-(NSString*) camelCaseString 

    //調(diào)用NSString的內(nèi)部方法獲取駝峰字符串。 
    //self指向被添加分類的類。 
    NSString *castr = [self capitalizedString]; 
     
    //創(chuàng)建數(shù)組來過濾掉空格, 通過分隔符對(duì)字符進(jìn)行組合。 
    NSArray *array = [castr componentsSeparatedByCharactersInSet: 
                      [NSCharacterSet whitespaceCharacterSet]]; 
     
    //把數(shù)組的字符輸出 
    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、類包含了很多個(gè)方法實(shí)現(xiàn),而這些方法需要不同團(tuán)隊(duì)的成員來實(shí)現(xiàn)
2、當(dāng)你在使用基礎(chǔ)類庫中的類時(shí),你不想繼承這些類而只想添加一些方法時(shí)。
 
Category能實(shí)現(xiàn)上面的需求,當(dāng)然也有使用Category是需要注意的問題:
1、Category可以訪問原始類的實(shí)例變量,但不能添加實(shí)例變量,如果想添加變量,那就通過繼承創(chuàng)建子類來實(shí)現(xiàn)。
2、Category可以重載原始類的方法,不大不推薦這么做,這樣會(huì)覆蓋掉原始類的方法。如果確實(shí)要重載,那就通過繼承創(chuàng)建子類來實(shí)現(xiàn)。
3、和普通接口有所區(qū)別的是,在Category的實(shí)現(xiàn)文件中的實(shí)例方法只要你不去調(diào)用它你可以不用實(shí)現(xiàn)所有聲明的所有方法。

相關(guān)文章

  • iOS中Runtime的幾種基本用法記錄

    iOS中Runtime的幾種基本用法記錄

    RunTime顧名思義運(yùn)行時(shí),就是系統(tǒng)在運(yùn)行的時(shí)候的一些機(jī)制,最主要的是消息機(jī)制。下面這篇文章主要給大家介紹了關(guān)于iOS中Runtime的幾種基本用法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS大文件的分片上傳和斷點(diǎn)上傳的實(shí)現(xiàn)代碼

    iOS大文件的分片上傳和斷點(diǎn)上傳的實(shí)現(xiàn)代碼

    這篇文章主要介紹了iOS大文件的分片上傳和斷點(diǎn)上傳的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-12-12
  • 實(shí)例解析iOS中音樂播放器應(yīng)用開發(fā)的基本要點(diǎn)

    實(shí)例解析iOS中音樂播放器應(yīng)用開發(fā)的基本要點(diǎn)

    這篇文章主要介紹了iOS開發(fā)中制作一個(gè)簡單的音樂播放器的基本要點(diǎn)解析,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-01-01
  • iOS開源一個(gè)簡單的訂餐app UI框架

    iOS開源一個(gè)簡單的訂餐app UI框架

    這篇文章主要介紹了iOS開源一個(gè)簡單的訂餐app UI框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • IOS開發(fā)中異步網(wǎng)絡(luò)請求上實(shí)現(xiàn)同步邏輯

    IOS開發(fā)中異步網(wǎng)絡(luò)請求上實(shí)現(xiàn)同步邏輯

    這篇文章主要介紹了IOS開發(fā)中異步網(wǎng)絡(luò)請求上實(shí)現(xiàn)同步邏輯的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • iOS和JS交互教程之WKWebView-協(xié)議攔截詳解

    iOS和JS交互教程之WKWebView-協(xié)議攔截詳解

    這篇文章主要給大家介紹了關(guān)于iOS和JS交互教程之WKWebView-協(xié)議攔截的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 一行代碼實(shí)現(xiàn)IOS 3DES加密解密

    一行代碼實(shí)現(xiàn)IOS 3DES加密解密

    這篇文章主要介紹了一行代碼實(shí)現(xiàn)IOS 3DES加密解密的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • IOS10 配置權(quán)限詳細(xì)介紹

    IOS10 配置權(quán)限詳細(xì)介紹

    這篇文章主要介紹了IOS10 配置權(quán)限詳細(xì)介紹的相關(guān)資料,訪問相機(jī)、相冊、麥克風(fēng)、通訊錄等等權(quán)限,都需要進(jìn)行相關(guān)的配置,不然會(huì)直接crash,需要的朋友可以參考下
    2016-12-12
  • iOS Swift邏輯運(yùn)算符示例總結(jié)

    iOS Swift邏輯運(yùn)算符示例總結(jié)

    運(yùn)算符是一個(gè)符號(hào),用于告訴編譯器執(zhí)行一個(gè)數(shù)學(xué)或邏輯運(yùn)算,下面這篇文章主要給大家介紹了關(guān)于iOS Swift邏輯運(yùn)算符的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • iOS block循環(huán)引用詳解及常見誤區(qū)

    iOS block循環(huán)引用詳解及常見誤區(qū)

    這篇文章主要介紹了iOS block循環(huán)引用詳解和應(yīng)用,常見誤區(qū)詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08

最新評(píng)論