協議與代理之間的闡述

今天看了一篇關於協議與代理的講解,感受還不錯的,以下:設計模式

一、協議(protocol),就是使用了這個協議後,必須按照協議規定的內容來處理事情,協議中要求的方法必須實現(@optional的方法除外)。atom

protocol是一種語法,它提供了一個很方便的、實現delegate模式的機會。設計

定義protocol以下:代理

@protocol ClassBDelegate<NSObject>code

  • (void)methodOne;
    @optionalget

  • (void)methodTwo:(NSString *)value;
    @endio

定義了一個ClassB的協議,這個協議中包含兩個方法,其中methodTwo爲可選的。語法

在ClassA的頭文件(ClassA.h)中實現這個協議,以下代碼:方法

@interface ClassA<ClassBDelegate>
@end
在ClassA的實現文件(ClassA.m)中實現ClassBDelegate的兩個方法,其中methodTwo能夠不實現,以下:協議

  • (void)methodOne{

    // 具體實現內容

    }

  • (void)methodTwo:(NSString *)value{

    // 具體實現內容

    }

二、代理(delegate),顧名思義就是委託別人辦事,當一件事情發生後,本身不處理,讓別人來處理。

delegate和protocol沒有關係。delegate自己是一種設計模式。是把一個類本身須要作的一部分事情,讓另外一個類(也能夠就是本身自己)來完成。

在ClassB的頭文件(ClassB.h)中定義一個代理以下:

@interface ClassB
@property (nonatomic, unsafe_unretained) id<ClassBDelegate> delegate;
@end
這樣,當咱們在ClassB的實現文件(ClassB.m)中遇到想讓別的類(如 ClassA)處理的問題時,就能夠這樣

[self.delegate methodOne]; [self.delegate methodTwo:@"須要傳遞的值"];

相關文章
相關標籤/搜索