我很好奇如何而不是这样做:
- (id)init {
if ((self = [super init])) {
//initialize subclass objects
}
return self;
}
通过传递超类对象的边界来初始化子类
- (id)initWithSuperclass:(Superclass *)superclassObject {
if ((self = superclass)) {
//initialize subclass objects
}
return self;
}
这可能吗?如果可以,我应该避免吗?对我来说,它散发着臭代码,但我没有看到另一种在不知道超类中的每个数据字段的情况下将超类对象的所有数据字段传递给子类初始化的方法。
任何追随我的想法/能够帮助我解决这个...臭代码的人吗?
编辑:
好的,假设我在下面有 A 类和 B 类:
@interface A
//stuff but we don't know what
end
@implementation A
- (id)init {
if (self = [super init]) {
//initialize A "stuff"
}
return self;
}
end
@interface B : A
@property (nonatomic, retain) UIButton* one;
- initWithA:(A*)superclassObject;
end
@implementation B
- (id)initWithA:(A*)superclassObject {
if ((self = superclassObject)) {
one = [[UIButton alloc] init];
}
return self;
}
end
我正在寻找这样做的好处是,在 A 类中,我不知道所有数据字段,因为它不是我可以访问的代码/代码。但是,我确实需要扩展该类。我希望能够通过在可能是类的对象实例的一部分的任何数据值/对象之上引入 B 类的新数据值(如上例中的“UIButton one”),将 A 类的实例更改为 B 类一个。