今天看了一篇关于协议与代理的讲解,感觉还不错的,如下:

1、协议(protocol),就是使用了这个协议后,必须按照协议规定的内容来处理事情,协议中要求的方法必须实现(@optional的方法除外)。

protocol是一种语法,它提供了一个很方便的、实现delegate模式的机会。

定义protocol如下:

@protocol ClassBDelegate<NSObject>

  • (void)methodOne;
    @optional

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

定义了一个ClassB的协议,这个协议中包含两个方法,其中methodTwo为可选的。

在ClassA的头文件(ClassA.h)中实现这个协议,如下代码:

@interface ClassA<ClassBDelegate>
@end
在ClassA的实现文件(ClassA.m)中实现ClassBDelegate的两个方法,其中methodTwo可以不实现,如下:

  • (void)methodOne{

    // 具体实现内容 

    }

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

    // 具体实现内容   

    }

2、代理(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:@"需要传递的值"];


Wingoc
32 声望0 粉丝

Stay hungry, Stay foolish!