私は、さまざまなクラスによってさまざまな深さでサブクラス化される Objective-C クラスのコレクションを持っています。オブジェクト全体が初期化されたら (すべてのサブクラスの init 関数が終了したら)、必要に応じてサブクラスによってオーバーライドされる "Update Cache" メソッドを実行する必要があります。
私の問題: クラス ツリーにさまざまな継承の深さがあるため、[self UpdateCache] を配置できる場所が 1 つもなく、初期化されていないサブクラスがないことを確認できます。唯一可能な解決策は、各クラスの初期化後に [super init] を呼び出して、親クラスが常に最後に呼び出されるようにすることです。これは、Objective-C を記述するすべてのガイドラインに反するため、避けたいと考えています。この問題に対する明確な解決策はありますか?
以下にコード例を示します。
@interface ClassA : NSObject
-(void)UpdateCache
@end
@interface ClassB : ClassA
-(void)UpdateCache
@end
@interface ClassC : ClassB
-(void)UpdateCache
@end
実装のために、どのクラスが初期化されたかに関係なく、すべてのサブクラスが初期化されたことを確認した後で、どうにかして UpdateCahce を呼び出す必要があります。
@implementation A
-(id)init
{
if(self = [super init])
{
// Placing [self UpdateCache] here would make it be called prior to
// B and C's complete init function from being called.
}
}
-(void)UpdateCache
{
}
@end
@implementation B
-(id)init
{
if(self = [super init])
{
// Placing [self UpdateCache] would result in UpdateChache not being
// called if you initialized an instance of Class A
}
}
-(void)UpdateCache
{
[super UpdateCache];
}
@end
@implementation C
-(id)init
{
if(self = [super init])
{
// Placing [self UpdateCache] would result in UpdateChache not
//being called if you initialized an instance of Class A or B
}
}
-(void)UpdateCache
{
[super UpdateCache];
}
@end