我有一组 Objective-C 类,它们被各种不同的类在各种不同的深度进行子分类。初始化整个对象后(所有子类的 init 函数都已完成),我需要运行“更新缓存”方法,然后根据需要被子类覆盖。
我的问题:由于我的类树有多种不同的继承深度,没有一个地方可以放置 [self UpdateCache] 并且我可以确定没有未初始化的子类。唯一可能的解决方案是在每个类初始化之后调用 [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