私のスーパー クラスは、構築時にのみ呼び出される「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
この画像では、PXTextBox から派生した PXTextMessageBox
両方ともメソッド common init をプライベートに宣言します