本文共 1107 字,大约阅读时间需要 3 分钟。
在编码时,为了部分代码复用,可能会用带继承关系,有时,父类的协议代理有限,需要我们在继承的同时,扩展父类的协议方法。此时,存在两种选择:
如UIKit框架中,UITableView 继承自UISCrollView ,同时他们都有同名的Delegate 属性,UITableView的Delegate是在UISCrollView的基础上扩展的。
举个例子,我有一个类WYKTextField,继承自类UITextField,UITextField有一个代理 delegate,而我自己的类XMTextField也有自己的代理delegate。
@roperty (nonatomic, weak)iddelegate;
现在xcode提示两个警告
1、 propert type XMTextFieldDelegate is incompatible with type UITextFieldDelegate inherited from UITextField。
2、 Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its superclass,use @dynamic to...
@protocol XMTextFieldDelegate@end
@implementation XMTextField@dynamic delegate;@end
@dynamic
告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成。(按代理的使用的正常步骤设置,无需专门写setter与getter方法)如UIKit框架中,UITableView 继承自UISCrollView,UITableView 子类拥有DataSource 协议代理属性,和 delegate 独立使用。
转载地址:http://ezdws.baihongyu.com/