protocol与delegate

来源:互联网 发布:水晶球软件 储量计算 编辑:程序博客网 时间:2024/05/18 20:32

一、关于协议
1、protocol是一系列方法的声明,注意:只有声明!
2、protocol的用处:如果好几个类都用到了几个相同的方法的声明,则可以把这几个相同的方法声明写成一个协议,哪个类用到了只需要实现这个协议即可。
这里写图片描述

二、关于代理
代理的意思:B作为A的代理,当A出现某种情况时会让B去做某件事,所以代理涉及到至少两个对象(也有可能自己是自己的代理)。
如果写死B类对象作为A类对象的代理(就是只让B类对象做代理),那么如果把B类删掉A类将无法正常工作,这就是耦合太紧,依赖度太高,这么设计的代理适应性不强,需要解耦合,解耦合要用到protocol。要知道B类对象之所以能成为A类对象的代理是因为B实现了一些“特殊”的方法,也就是说,只要是个类它也实现了这些方法,它也可以成为A的代理,因为A才不管自己的代理是谁,只要代理能在A需要的时候能处理相应的事情就可以了。 也就是说,无论哪个类只要实现了A要求的方法就可以成为A的代理,那么protocol可以很好地解决这个问题。
因为protocol就是一系列方法的声明,所以只要遵守A的代理协议无论谁都可以成为A的代理。

@property(nonatomic,weak) id <delegate protocol> delegate //假设这是A的代理属性,从id可知道这个代理任意类的对象都可以充当,但前提是这个类需要遵守“delegate protocol”。也就是说遵守了“delegate protocol”的类都可以当A的代理,这样就解耦合了。

定义学生类的头文件Student.h,就像是A

学生类的实现文件Student.m
应该看到代理的实现原理了吧,也能看到代理方法调用的时机:当A的某个方法(找房子)被调用时,他的代理dog就会执行一定的方法。(注意代理方法何时被调用!)

代理类,Dog,它遵守了代理协议

Dog类的实现文件Dog.m

这里写图片描述

0 0
原创粉丝点击