1. 類別
(1)為已有的類添加新的方法
(2)可以在類別中添加新屬性,但是不能為類別添加新的實例變量。
(3)缺陷:類別有兩個局限
-1. 無法向類中添加實例變量,類別中沒有空間容納實例變量。
-2. 存在名稱沖突問題,即類別中的實力方法與現有方法重名,類別具有更高優先級,造成方法覆蓋。
(4) 優勢:
-1.可以將類的實現代碼放到不同的文件或框架中,需要的時候引用特定的文件即可。
-2.可以創建對私有方法的前行引用。
注意:
(1)類別的方法不一定非要在@implementation中實現,也可以在其他位置實現,但是當調用Category的方法時,依據繼承樹沒有找到該方法的實現,程序則會崩潰。
(2) 類別理論上不能添加變量,但是可以使用@dynamic來彌補這種不足。
2.擴展
擴展與類別類似,其實就相當與匿名的類別。
類別和擴展的區別
(1)類別無法向類中添加新的實例變量,extension可以添加屬性(變量)。
(2)extension里聲明的方法需要在.m中實現,category不強制要求。
(3)當類別中的方法與原始類方法名稱沖突時,類別具有更高的優先級。類別方法將完全取代初始方法從而無法再使用初始方法。