iOS 协议代理的继承和扩展
来源:互联网 发布:仓库卷帘自动门plc编程 编辑:程序博客网 时间:2024/05/16 17:50
在编码时,为了部分代码复用,可能会用带继承关系,有时,父类的协议代理有限,需要我们在继承的同时,扩展父类的协议方法。此时,存在两种选择:
1、在父类协议代理delegate的基础上扩展新方法。
如UIKit框架中,UITableView 继承自UISCrollView ,同时他们都有同名的Delegate 属性,UITableView的Delegate是在UISCrollView的基础上扩展的。
举个例子,我有一个类WYKTextField,继承自类UITextField,UITextField有一个代理 delegate,而我自己的类XMTextField也有自己的代理delegate。
实现方式:
@roperty (nonatomic, weak)id <WYKTextFeildDelegate> delegate;
现在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...
解决第一警告------子类协议遵循父类的协议(iOS 中的协议可以是多继承关系)
@protocol XMTextFieldDelegate<NSObject,UITextFieldDelegate>@end
解决第二个警告------用@dynamic
@implementation XMTextField@dynamic delegate;@end
总结:
- 第一个就是遵循父类的代理方法。
- 第二个就是用
@dynamic
告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成。(按代理的使用的正常步骤设置,无需专门写setter与getter方法)
2、在子类中创建一个不同与父类的新的协议代理属性。
如UIKit框架中,UITableView 继承自UISCrollView,UITableView 子类拥有DataSource 协议代理属性,和 delegate 独立使用。
在子类中 仿照父类的情况,定义一套协议代理方法,注意新的协议代理属性不同于父类的delegate 即可,如dataSource,使用时方式相似,这里不再赘述。
对代理的深入学习,请阅读:
iOS 协议代理的深入理解
iOS 关于修饰代理用weak还是assign, strong
作者水平有限,如有不足之处,欢迎交流学习!
1 0
- iOS 协议代理的继承和扩展
- iOS开发中关于继承、扩展和协议的理解
- ios 协议和代理
- 类的扩展(二):类目、延展、协议和代理
- iOS 协议的继承
- 论ios代理和协议
- iOS设计模式学习 (二) OC协议之接口继承和代理设计
- iOS巅峰之Swift结构体和类, 枚举, 构造器, 继承, 协议, 扩展(完结篇)
- iOS纪录-类别、扩展和继承的概念
- 类的扩展: 继承, 类目, 延展, 协议
- iOS中代理协议的定义和使用
- ios深度解析之Swift(枚举,继承,协议,扩展)
- IOS开发之协议和代理
- IOS开发---协议和代理模式
- iOS复习笔记11:协议和代理
- iOS开发之协议和代理
- IOS开发之协议和代理
- 系列:iOS开发-协议和代理
- hive表信息查询:查看表结构、表操作等
- AndroidStudio中使用Jacoco统计Android应用程序代码覆盖率
- 1006. 换个格式输出整数 (15) PAT
- Reshape the Matrix
- 百度2017春招笔试真题编程题集合-2
- iOS 协议代理的继承和扩展
- Spring注解@Component、@Repository、@Service、@Controller
- 在for循环中 i++ 跟 ++i 有区别吗?
- c++ 虚继承
- 二叉排序树查找操作
- caffe-windows 绘制loss accuracy曲线 IOError: [Errno 13] Permission denied: 'aux.txt'错误纠正
- IO复用的高级应用:同时处理TCP和UDP的服务
- BroadcastReceiver ------ANR-解决方案
- 堆排序