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

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

類別(Category)的基本概念

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

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

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

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

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

類別方法的應用

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

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

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

類別方法的侷限性

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

                現有類中的方法

類別的命名和用法

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

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

    

    宣告檔案:

#import <Foundation/Foundation.h>@interfaceNSArray(Convert)+(NSMutableArray*)arrayFormNumber:(int)number;@end

實現檔案:
#import "NSArray+Convert.h"@implementationNSArray(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