我的超类定义了一个名为“commonInit”的私有方法,该方法仅在构造时调用。
超类由 2 个附加类派生,每个类还实现了一个名为“commonInit”的方法
在构造派生类的对象时,我在调试器中看到子类方法是从超类的范围调用的。
这似乎是一种非常危险的行为——即使在一个微不足道的情况下,你巧合地“覆盖”了你的超类私有方法
如何在不重命名超类中的方法的情况下克服这种行为?
例子:
@interface ASuperView : UIView
@end
@implementation ASuperView
-(id)init
{
self = [super init];
if(self)
{
[self commonInit]; // BOOM - The derived view method is called in this scope
}
return self;
}
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self)
{
[self commonInit];
}
return self;
}
-(void)commonInit
{
//setup the view
}
@end
@interface ADerivedView : ASuperView
@end
@implementation ADerivedView
-(id)init
{
self = [super init];
if(self)
{
[self commonInit];
}
return self;
}
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self)
{
[self commonInit];
}
return self;
}
-(void)commonInit
{
//setup the view for the derived view
}
@end
在此图像中,PXTextMessageBox 派生自 PXTextBox
两者都私下声明了方法 common init