【Objective-C】OC中類別(Category)基本概念與用法
阿新 • • 發佈:2019-01-28
類別(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