您的位置:首页 > 移动开发 > IOS开发

iOS多态:初始化时效果出不来?可能是因为覆盖了父类的同名方法

2017-01-18 15:31 218 查看
首先说下多态,最直观的理解就是OC种的数组!分为两种,一种是NSArray,一种是NSMutableArray,前者是后者的父类!

相信大家在实际写代码过程中也有类似的发现,NSArray可以接收NSMutableArray产生的对象,而反过来不可以,这就是多态!

也就是说多态就是父类指针可以指向子类指针!

然后今天在码完代码开始测试时,发现button的titleColor效果一直出不来,各种检查都没有查出来问题!

最后在打了N个断点后发现我的button是通过继承自UIButton的MyButton中继承过来的,而在MyButton初始化时为了代码清晰,

我使用了下面的处理#import <UIKit/UIKit.h>

@interface MyButton : UIButton

@end

- (instancetype)init{
if (self = [super init]) {
[self setup];
}
return self;
}

- (void)setup{
// 初始化时设置,可以加载一些主题风格
}
然后我再button初始化的时候也采取了同样的方式#import <UIKit/UIKit.h>

@interface SubButton : MyButton

@end

- (instancetype)init{
if (self = [super init]) {
[self setup];
}
return self;
}

- (void)setup{
// 初始化时设置,可以在具体使用时加载具体不同的style
}然后就跳进坑里了!
因为子类重写了父类里面的同名方法,而由于多态的关系,在父类调用setup的时候,self指向的是SubButton对象,所以最后调用的依然是SubButton的setup方法!

所以最后父类初始化时的setup就这样被忽视了!

因为子类不需要设置全部效果,所以看起来很明显效果不同,非常容易察觉出错,但是一些非直观效果的这类错误没有经验很难查找...

总结经验:事实上,深入理解iOS多态和运行时机制是非常重要的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多态 继承