1. 程式人生 > >Objective-C]OC中類別(Category)基本概念與用法

Objective-C]OC中類別(Category)基本概念與用法

類別(Category)的基本概念

封裝是面向物件的一個特徵,OC也不例外,但是有的時候我們會碰到這樣的一種情況,不如我封裝了一個類,

不想再動它了,可是隨著程式功能的增加,需要在那個類中增加一個小小的方法,這是我們就不必再那個類中

做修改或者在定義一個子類,只需要在用到的地方隨手新增一個該類的類別(Category)即可。

(1)在類別中定義的方法,會成為原始類的一部分,與其他方法的呼叫沒有區別。

(2)通過給父類定義類別方法,其子類也會繼承這些方法。如果子類新增類別方法,父類則不會用手子類的類別方法。

類別方法的應用

  • 對現有類進行擴充套件:比如,可以進行擴充套件Cocoa touch框架中類,你在類別中增加的方法會被子類所繼承,而且

    在執行時跟其他的方法沒有區別。

    • 作為子類的替代手段:不需要定義和使用一個子類,你可以通過類別直接向已有的類別中增加方法。
    • 對類中的方法進行歸類:利用category把一個龐大的類劃分為小塊來分別進行開發,從而更好的對類中的方法進行更新和維護。

      類別方法的侷限性

      • 無法向類別中,新增新的例項變數,類別沒有位置來容納例項變數。如果想增加類的例項變數,只能通過定義子類的方式。
      • 如若在類別中覆蓋現有類的方法。這樣可能會引起super訊息鏈的斷裂,因為類別中的方具有更高的優先順序,因此,一般不要覆蓋

        現有類中的方法

        類別的命名和用法

        類別的命名規則:類名+擴充套件方法,如:NNString+Add;

        類別的介面宣告與類的定義十分相似,但是類別不繼承父類,只需要帶有一個括號,表明該類的主要用途

        \

        宣告檔案:

        ?
        1 2 3 4 5 6 #import <foundation foundation.h=""> @interface NSArray (Convert) +(NSMutableArray *)arrayFormNumber:(int)number; @end</foundation>

        ?
        1 實現檔案:
        ?
        1
        ?
        1 #import "NSArray+Convert.h" @implementation NSArray (Convert) +(NSMutableArray *)arrayFormNumber:(
        int)number{ NSMutableArray *numberArray=[[NSMutableArray alloc]init]; while (number) { int last=number%10; //取出最後一位; number=number/10; [numberArray addObject:[NSNumber numberWithInt:last]]; } return [numberArray autorelease]; } @end 新增方法: