1. 類目 (Category):為已知的類添加方法
可以為已知的類添加方法,哪怕是你沒有源碼的類
通過類目添加方法會成為原始類的一部分
與原類中的方法同級
而且會被子類繼承
類目的用處
1. 可以擴充別人的類,可以作為繼承的替代方式。
2. 把代碼放到多個檔案中;便於多人協作。
注意:
不能在類目中添加 成員變數
可以為同一類添加多個類目,但類目名和方法名不能重複
不要隨意重寫類中的方法
*********************************************************************
2. 延展 (Extension) :是一種特殊形式的類目
編寫在類的實現檔案中
延展中定義的方法在類本身中實現(.m)
作用:定義私人方法
注意:
延展不寫類目名時(即括弧內不寫),表示延展中定義的方法,必須實現。
如果提供了類目名稱,則可以選擇性實現
//····.m
@interface Test()
-(void) show;
@end
**************************************************************************
3. 協議 (Protocal):是一套標準(類似於介面、方法聲明)
定義了應該實現什麼,但不關心具體的怎麼實現。
OC的協議是由@protocol聲明的一組方法列表
要求其它的類去實現,相當於@interface部分的聲明
@protocol 協議名稱
@end
確認協議:
定義的協議必須要被某些類實現
類中需要實現協議中定義的方法
類中可實現多個協議
@interface 類名:⽗類名<
協議名稱,協議名⼆...>
@end
特點:
1. 協議相當於確認類的父類
2. 可以規範類的行為
3. 利於系統設計
4. 利於團隊開發等
5. 是可選文法,並不是一定要使用協議
注意:
確認協議時應實現協議中 @required
修飾的方法
可以選擇性實現 @optional
修飾的方法
使用[對象
conformsToProtocol:@protocol
(SalerProtocol)]判斷是否遵循協議
協議的實現過程:定義協議------確認協議-------實現
******************************************************************************
協議應用—代理
代理模式:(有沒有協議都是可以實現方法)
即本身不做實際的事情,而要求其他人去做
例如要賣房子,不是直接銷售,而是讓中介去幫自己銷售
中介就是我們的代理
用assign修飾
@property(assign, nonatomic) id<protocol>delegate;