联系人:石虎 QQ:1224614774 昵称: 嗡嘛呢叭咪哄
QQ群:807236138 群称: iOS 技术交流学习群
一、概念
@interface A : NSObject
- (instancetype)initDesignated NS_DESIGNATED_INITIALIZER;
- (instancetype)initUndesignated;
@end
@implementation A
- (instancetype)init {
return ([self initUndesignated]);
}
- (instancetype)initDesignated {
return (self = [super init]);
}
- (instancetype)initUndesignated{
return (self = [self initDesignated]);
}
@end
@interface B : A
- (instancetype)initDesignatedB NS_DESIGNATED_INITIALIZER;
- (instancetype)initUndesignatedB;
@end
@implementation B
- (instancetype)initDesignated {
return [self initUndesignatedB];
}
- (instancetype)initDesignatedB {
return (self = [super initDesignated]);
}
- (instancetype)initUndesignatedB {
return ([self initDesignated]);
}
@end
最后一个函数 initUndesignatedB 里面这样调用不会有警告,其实很好理解。
1.因为self没有实现initUndesignated,所以会调用 super 的 initUndesignated方
2.super 的 initUndesignated 需要调用 initDesignated 方法
3.子类实现了 initDesignated 方法,所以最终回调用到 self 的 initDesignated 方法,这当然不会有什么问题了