類别——一種為現有的類添加新方法的方式。
利用Objective-C的動态運作時配置設定機制,可以為現有的類添加新方法,這種為現有的類添加新方法的方式稱為類别(catagory)。他可以為任何類添加新的方法,包括那些沒有源代碼的類。
類别使得無需建立對象類的子類就能完成同樣的工作。
一、聲明類别
@interface NSString (subString)
- (NSString *)getNewMethod;//新添加的方法
@end
這個聲明有兩個特點:
- 現有的類位于@interface關鍵字之後,其後是位于圓括号中的類别名稱。類别名稱是subString,而且該類别将向NSString類中添加方法。換句話說:“我們向NSString類中添加一個名稱為subString的類别。”
- 可以執行希望向其添加類别的類以及類别的名稱,還可以列出添加的方法,不可以添加新的執行個體變量,類别生命中沒有執行個體變量部分。(下面會說明)
二、實作類别
#import "NSString+subString.h"
@implementation NSString (subString)
-(NSString *)getNewMethod{
return @"newMethed";
}
@end
在實作部分也包括類名、類别名和新方法的實作代碼。
三、類别的局限性
有兩方面局限性:
- 名稱沖突,即當類别中的方法與原始類方法名稱沖突時,類别具有更高的優先級。類别方法将完全取代初始方法進而無法再使用初始方法。
- 無法向類中添加新的執行個體變量,類别沒有位置容納執行個體變量。(用runtime可以解決,請看我的另外一篇文章)
四、類别的作用
類别主要有3個作用:
- 将類的實作分散到多個不同檔案或多個不同架構中。
- 建立對私有方法的前向引用。
- 向對象添加非正式協定。
在接下來的文章一一說明。
文章參考:
1、http://blog.csdn.net/jiajiayouba/article/details/21105873
2、http://www.cnblogs.com/stevenwuzheng/p/5457487.html
3、http://blog.csdn.net/wzzvictory/article/details/9295317