天天看點

iOS類别(Category)和擴充(Extension)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">建立類别和擴充</span>
           
iOS類别(Category)和擴充(Extension)
iOS類别(Category)和擴充(Extension)

類别

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

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

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

一、建立類别

1、聲明類别

聲明類别與聲明類的形式很相似

#import <UIKit/UIKit.h>

@interface UIButton (ThemeManage)

- (void)changeColor;

@end
           

這個聲明有 兩個特點 :

      (1) 現有的類位于@interface關鍵字之後,其後是位于圓括号中的類别名稱。類别名稱是ThemeManage ,而且該類别将向UIButton類中添加方法。換句話說:“我們向UIButton類中添加一個名稱為ThemeManage的類别。”

         同名類别有唯一性 ,但是可以添加任意多的不同名類别。

     (2)可以執行希望向其添加類别的類以及類别的名稱,還可以列出添加的方法, 不可以添加新的執行個體變量,類别生命中沒有執行個體變量部分。

實作方法在.m檔案中進行實作

2、類别的局限性

有兩方面局限性:

    (1)無法向類中添加新的執行個體變量,類别沒有位置容納執行個體變量。

    (2)名稱沖突,即當類别中的方法與原始類方法名稱沖突時,類别具有更高的優先級。類别方法将完全取代初始方法進而無法再使用初始方法。

無法添加執行個體變量的局限可以使用字典對象解決

3、類别的作用

類别主要有3個作用:

       (1)将類的實作分散到多個不同檔案或多個不同架構中。

       (2)建立對私有方法的前向引用。

       (3)向對象添加非正式協定。

類别不能像繼承時那樣給類别接口增加新的執行個體變量,而是要擴充一個類的行為。類别的名稱是任意的。

擴充

擴充與類别相似,擴充相當于匿名類别,擴充隻有接口檔案(.h)而沒有實作檔案(.m)定義的方法通通在類裡邊實作

某些情況下,我們需要聲明一個@property,它對外是隻讀的(readonly),而對内是可讀寫(readwrite),這時,可以通過(Extension)實作

類别與擴充的差別在于:

類别一般不重新再增加變量,隻增加新的方法,而擴充可以。