先上图
协议:制定双方责任(方法或属性)
委托方:按照协议提出需求
代理方:按照协议完成需求,并返回结果
iOS对象不支持多继承,协议可继承
协议有两个修饰符@optional和@required,创建一个协议如果没有声明,默认是@required状态的。这两个修饰符只是约定代理是否强制需要遵守协议,如果@required状态的方法代理没有遵守,会报一个黄色的警告,只是起一个约束的作用,没有其他功能。
无论是@optional还是@required,在委托方调用代理方法时都需要做一个判断,判断代理是否实现当前方法,否则会导致崩溃。
// 判断代理对象是否实现这个方法,没有实现会导致崩溃
if ([self.delegaterespondsToSelector@s:electoruse(rLoginWithUsernamepass:word:)])
{
[self.delegate userLoginWithUsername:self.username.text password:self.password.text];
}
在iOS中代理本质是代理内存的传递和操作