1. 程式人生 > >協議與委托

協議與委托

警告 變量 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. 協議體現的是一種規範,定義協議的類可以把協議定義的方法委托給實現協議的類,這樣可以讓類定義具有更好的通用性,因為具體的動作將有該協議的實現類去完成。

協議與委托