簡單使用
1. 基本用途
- 可以用來聲明一大堆方法(不能聲明成員變量)
- 只要某個(gè)類遵守了這個(gè)協(xié)議,就相當(dāng)于擁有這個(gè)協(xié)議中的所有方法聲明
- 只要父類遵守了某個(gè)協(xié)議,就相當(dāng)于子類也遵守了
2. 格式
- 協(xié)議的編寫
@protocol 協(xié)議名稱
// 方法聲明列表
@end
- 某個(gè)類遵守協(xié)議
@interface 類名 : 父類 <協(xié)議名稱>
@end
3. 關(guān)鍵字
協(xié)議中有2個(gè)關(guān)鍵字可以控制方法是否要實(shí)現(xiàn)(默認(rèn)是@required),在大多數(shù)情況下,用途在于程序員之間的交流
- @required:這個(gè)方法必須要實(shí)現(xiàn)(若不實(shí)現(xiàn),編譯器會(huì)發(fā)出警告)
- @optional:這個(gè)方法不一定要實(shí)現(xiàn)
4. 協(xié)議遵守協(xié)議
- 一個(gè)協(xié)議可以遵守其他多個(gè)協(xié)議,多個(gè)協(xié)議之間用逗號(hào) , 隔開
- 一個(gè)協(xié)議遵守了其他協(xié)議,就相當(dāng)于擁有了其他協(xié)議中的方法聲明
@protocol 協(xié)議名稱 <協(xié)議1, 協(xié)議2>
@end
5. 基協(xié)議
- NSObject是一個(gè)基類,最根本最基本的類,任何其他類最終都要繼承它
- 其實(shí)還有一個(gè)協(xié)議,名字也叫NSObject,它是一個(gè)基協(xié)議,最根本最基本的協(xié)議
- NSObject協(xié)議中聲明很多最基本的方法,比如description、retain、release等
- 建議每個(gè)新的協(xié)議都要遵守NSObject協(xié)議
6. 定義變量時(shí)指定協(xié)議
// NSObject類型的對(duì)象,并且要遵守NSCopying協(xié)議
NSObject<NSCopying> *obj;
// 任何OC對(duì)象,并且要遵守NSCoding協(xié)議
id<NSCoding> obj2;
代理設(shè)計(jì)模式
1. 設(shè)計(jì)原理
- 有些麻煩的事情不想自己親自做,就可以找個(gè)人幫忙做,即交給代理對(duì)象去做
2. 設(shè)計(jì)原則
- 首先得擁有某個(gè)代理對(duì)象屬性
- 其次要很清楚代理有哪些方法
- 最后要保證能解耦
3. 實(shí)現(xiàn)方案
- 定義一個(gè)protocol,在其中聲明一些和代理溝通的方法
- 擁有一個(gè)代理屬性id<protocol> delegate
- 讓代理遵守protocol