Objective-C 日記⑨ 類別Category

來源:互聯網
上載者:User

類別(Category)['kætiɡəri] n. 種類,分類;範疇
  定義:為現有的類添加新方法

一、聲明類別

    類別的聲明與類的聲明格式相似,如下:

@interfaceNSString (NumberConvenience)//convenience [kən'vi:njəns]n. 便利;廁所;便利的事物-(NSNumber *) lengthAsNumber;@end    

  該聲明具有如下特點:

    1、現有的類位於@interface關鍵字之後,該方法表示向NSString類中添加一個名稱NumberConvenience的類別。(注意:要保證類別名稱的唯一性)

    2、可以添加其他類別的類(本例中是NSString你也可以添加其他類)和方法。別問了以@end結束。

  與類的區別:類別中不可以聲明執行個體變數

二、實作類別別
    @implementation NSString (NumberConvenience)    -(NSNumber *) lengthAsNumber    {        unsigned int length =[self length];        return ([NSNumber numberWithUnsignedInt:length]);    }    @end

說明:lengthAsNumber方法通過[self length]來獲得字串長度。

eg:

  建立一個新的NSMutableDictionary類的對象並添加一個字串及其長度,分別做鍵和值。

int main(int argc,const char *argv[])    {        NSAutoreleasePool *pool;        pool=[[NSAutoreleasepool alloc] init];        NSMutableDictionary *dict;        dict =[NSMutableDictionary dictionary];        [dict setObject:[@"hello" lengthAdNumber] forKey:@"hello"];        NSLog(@"%@",dict);        [pool release];        return (0);    }

  暫無mac 運行結果(不出bug)為5

三、局限性及作用

局限性:

  1、無法向類中添加新的執行個體變數;

  2、命名容易起衝突,簡單的說就是類別中的方法名和現有的方法名重名;當衝突時你的類別方法將取代初始方法(類別的優先順序高)

作用:

  1、將類的實現分散到多個不同的檔案或多個不同架構中

  2、建立對私人方法的前向引用 前向引用聲明不能聲明該類的對象, 也不能在內聯成員函數中使用該類的對象, 只能聲明該類的指標, 引用, 函數形參和傳回型別

  3、向對象添加非正式協議

    註:非正式協議(interface) oc中的協議跟c#中的介面(interface)區別:c#中介面是強制必須實現的,否則編譯報錯,而obj-c雖然在編譯時間會警告,但是最終能編譯通過。

      正式協議(protocal):語義上更強烈一些:要求採用該協議的類,"必須"實現協議中約定的方法

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.