注意在Category中复写方法
来源:互联网 发布:软件分解 编辑:程序博客网 时间:2024/05/16 09:26
Objective-C的Category可以使我们很方便的扩展已有的类,但是仅限于扩展新的方法。
如果想要复写旧的方法,像这样
- (void)setEnabled:(BOOL)enabled [super setEnabled:enabled];// something other to do.}
看起来没有什么问题,编译器也正常编译通过了。
但事实是,旧的setEnabled永远也不会调用到了。
如果真的想复写就的方法,需要使用swizzle_method动态替换方法。
+ (void)load { Method original, swizzle; original = class_getInstanceMethod(self, @selector(setEnabled:)); swizzle = class_getInstanceMethod(self, @selector(swizzle_setEnabled:)); method_exchangeImplementations(original, swizzle);}- (void)swizzle_setEnabled:(BOOL)enabled { [self swizzle_setEnabled:enabled]; // something other to do. //放心在swizzle_setEnabled:方法中调用swizzle_setEnable:,这样并不会递归调用 //,因为在运行时setEnabled:和swizzle_setEnabled:已经调换了,如果这里调用setEnabled:反而会递归调用造成死循环。 }
0 0
- 注意在Category中复写方法
- 关于在类中复写hashCode方法的返回值问题
- 【OC学习-14】多态是什么?看父类方法在子类中复写产生的效果
- Java中复写equals()方法的同时也要复写hashCode()方法
- 黑马程序员——复写Object类中equals()方法,用到Instanceof,向下转型,复写等等
- 【java编程】IO类之复写BufferedInputStream中read方法
- java中复写方法和同名变量的调用问题
- Android复写按钮方法
- 为什么不要在category中重写一个类原有的方法
- Category在开发中使用的淫技之——改变系统方法
- 在分类及预测任务中对高维类别(category)变量的预处理方法
- [iOS] 在category中使用block
- 复写的Object常用方法
- 在有返回值的方法中应注意什么
- 注意是在什么方法中初始化的
- 在action中定义的方法一定要注意的事项
- 自定义Adapter,通过复写getView方法,实现ListView中item背景颜色变化
- hibernate复合主键中为什么要复写equals和hashcode方法?还要implement Serializable?
- Ubuntu 下搭建 Android 开发环境(图文)
- web.xml 配置详解
- ubuntu下搭建android遇到的问题:SDK Manager下没有Tools->Options
- 多进程的写法
- 透析Java本质-交换变量的几种方式
- 注意在Category中复写方法
- 师傅
- Android Scroller简单用法
- 学车小记-科目三集训
- 科目3通过,学车经历总结
- 简单的TCP连接Server和Client
- 程序员,离开了库你还能干什么?
- World Final 2008 ,LA 4127 The Sky is the Limit 离散化
- 两次考试失败案例