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

類别
類别是一種為現有的類添加新方法的方式。
利用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)實作
類别與擴充的差別在于:
類别一般不重新再增加變量,隻增加新的方法,而擴充可以。