iOS 的 Protocol 协议的使用

protocol -->用来声明方法. 用来存储一系列方法的声明.只是一个.h文件

任何类只要遵守了protocol,就相当于拥有了protocol的全部方法的声明.

@protocol GMProtocol <NSObject>

@required  //必须实现,如果不写就默认是required.如果不实现仅是会弹出警告.(因为是OC是弱语法)

- (void) read;

@optional //可选

- (void) write;

@end

让学生类遵守GMProtocol的协议;

@interface Student : NSObject <GMProtocol>

@end

@implementdation Student

- (void) read { NSLog(@"read"); }

- (void) write { NSLog(@"write"); }

@end

作用:

1. 包含很多方法的声明.

2. 可以将很多类公共的方法的声明抽取到一个协议中,让每个类遵守协议即可.

使用场景:

1. 限定变量指向的对象

要求变量d指向的对象必须遵守PlayProtocol协议

id<PlayProtocol> d = [[Person alloc] init]; //如果Person没有遵守PlayProtocol协议会警告

@interface Person: NSObject <PlayProtocol>  //如果Person遵守PlayProtocol协议则OK

@end

2. 限定属性是具有某些协议的

@property (nonatomic, strong) Dog<PlayProtocol> * dog;

@interface Dog : NSObject <PlayProtocol>

补充:

设计模式./-->是一种手段,一种工具.可以使代码的写起来更方便
1. 代理设计模式(委托设计模式)

<1>. 监听器的场合

  对象B(保姆)想监听对象A(婴儿)的一些行为

<2>. 通知的场合

  对象A(婴儿)发生了一些行为,想通知B(保姆)[B(保姆)为代理对象]

<3>. 有些事情,不想自己处理,可以交给别人处理

  对象婴儿发生了一些事情,不想自己处理,交给保姆处理

2. 代理设计模式的使用场合

  当对象A发生了一些行为,想告知对象B-->[让对象B成为对象A的代理对象]

  对象B想监听对象A的一些行为-->[让对象B成为对象A的代理对象]

  当对象A无法处理某些行为的时候,想让对象B帮忙处理-->[让对象B成为对象A的代理对象]

原文地址:https://www.cnblogs.com/aunty/p/5118373.html