在iOS項目中代理是一種不可缺少的消息傳遞方式,代理主要由三部分組成:
協議:用來規定代理雙方可做什么,必須做什么。
代理:根據指定的協議,完成委托方需要實現的功能。
委托:根據規定協議,指定代理去完成什么功能。
一、簡單使用
基本用途
1、可以用來聲明一大堆方法(不能聲明成員變量)
2、只要某個類遵守了這個協議,就相當于擁有這個協議中的所有方法聲明
3、只要父類遵守了某個協議,就相當于子類也遵守了
格式
協議的編寫
@protocol協議名稱
//方法聲明列表
@end
某個類遵守協議
@interface類名:父類<協議名稱>
@end
關鍵字
協議中有2個關鍵字可以控制方法是否要實現(默認是@required),在大多數情況下,用途在于程序員之間的交流
1、@required:這個方法必須要實現(若不實現,編譯器會發出警告)
2、@optional:這個方法不一定要實現
協議遵守協議
1、一個協議可以遵守其他多個協議,多個協議之間用逗號 , 隔開
2、一個協議遵守了其他協議,就相當于擁有了其他協議中的方法聲明
@protocol協議名稱<協議1,協議2>
@end
基協議
1、NSObject是一個基類,最根本最基本的類,任何其他類最終都要繼承它
2、其實還有一個協議,名字也叫NSObject,它是一個基協議,最根本最基本的協議
3、NSObject協議中聲明很多最基本的方法,比如description、retain、release等
4、建議每個新的協議都要遵守NSObject協議
定義變量時指定協議
// NSObject類型的對象,并且要遵守NSCopying協議
NSObject *obj;
//任何OC對象,并且要遵守NSCoding協議
id obj2;
二、代理模式設計
設計原理
有些麻煩的事情不想自己親自做,就可以找個人幫忙做,即交給代理對象去做
設計原則
首先得擁有某個代理對象屬性
其次要很清楚代理有哪些方法
最后要保證能解耦
實現方案
定義一個protocol,在其中聲明一些和代理溝通的方法
擁有一個代理屬性id delegate
讓代理遵守protocol