协议与代理之间的阐述

今天看了一篇关于协议与代理的讲解,感受还不错的,以下:设计模式

一、协议(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:@"须要传递的值"];

相关文章
相关标签/搜索