天天看點

類别(Category)的作用(零)

類别——一種為現有的類添加新方法的方式。

利用Objective-C的動态運作時配置設定機制,可以為現有的類添加新方法,這種為現有的類添加新方法的方式稱為類别(catagory)。他可以為任何類添加新的方法,包括那些沒有源代碼的類。

類别使得無需建立對象類的子類就能完成同樣的工作。

一、聲明類别

@interface NSString (subString)
- (NSString *)getNewMethod;//新添加的方法
@end
           

這個聲明有兩個特點:

  1. 現有的類位于@interface關鍵字之後,其後是位于圓括号中的類别名稱。類别名稱是subString,而且該類别将向NSString類中添加方法。換句話說:“我們向NSString類中添加一個名稱為subString的類别。”
  2. 可以執行希望向其添加類别的類以及類别的名稱,還可以列出添加的方法,不可以添加新的執行個體變量,類别生命中沒有執行個體變量部分。(下面會說明)

二、實作類别

#import "NSString+subString.h"

@implementation NSString (subString)
-(NSString *)getNewMethod{
    return @"newMethed";
}
@end
           

在實作部分也包括類名、類别名和新方法的實作代碼。

三、類别的局限性

有兩方面局限性:

  1. 名稱沖突,即當類别中的方法與原始類方法名稱沖突時,類别具有更高的優先級。類别方法将完全取代初始方法進而無法再使用初始方法。
  2. 無法向類中添加新的執行個體變量,類别沒有位置容納執行個體變量。(用runtime可以解決,請看我的另外一篇文章)

四、類别的作用

類别主要有3個作用:

  1. 将類的實作分散到多個不同檔案或多個不同架構中。
  2. 建立對私有方法的前向引用。
  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

繼續閱讀