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的代理对象]