協議與委托
阿新 • • 發佈:2018-01-01
警告 變量 make gate protocol 協議 del 委托 所有
一. 協議
1. 類似於接口,用於定義多個類應該遵守的規範:
並不關心這些類的內部狀態數據,也不關心這些類裏方法的具體實現,只是規定這些類要提供某些方法。
2. 使用@protocol關鍵字:
1 @protocol 協議名 <父協議1, 父協議2, ...> 2 { 3 statement... 4 }
註意:
-
- 一個協議可以繼承多個協議,但是協議不能繼承類
- 方法:只是聲明,沒有具體實現。
3. 遵守協議的類(即代理):
- 如果沒有實現協議中的所有方法,編譯器會發出警告:
- @optional:聲明的方法可選擇是否實現
- @required:聲明的方法是必須要實現的。@required是默認行為
@protocol FKPersonAction // 定義協議的方法 @optional - (void) makeUp; @required - (void) walk; @end
可選實現makeup方法,但是必須實現walk方法,否則編譯器就會提示警告
4. 聲明對象的方法:
- 方法一:實現類定義對象
FKPerson *person = [[FKPerson alloc] init];
- 方法二:協議來定義對象
- NSObject<協議1, 協議2, ...> *變量;
- id<協議1, 協議2, ...> *變量;
- 註意:
- 采用協議來定義對象,類似於其他語言使用接口定義變量的語法
- 采用協議來定義對象,對象的編譯時類型僅僅是所遵守的協議類型,所以只能調用該協議中定義的方法
二. 協議與委托(delegate)
1. 協議體現的是一種規範,定義協議的類可以把協議定義的方法委托給實現協議的類,這樣可以讓類定義具有更好的通用性,因為具體的動作將有該協議的實現類去完成。
協議與委托