的初始化我很好奇如何,而不是做內設置超類的實例:如何繼承
- (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,而不管數據值/對象是否爲類的對象實例的一部分答:
我不認爲我明白你想達到什麼目的。你可以給一個具體的代碼例子,你認爲在第一個例子中不起作用,但在第二個例子中有效嗎? – herzbube
我編輯我的問題是(我以爲是)更具體。我添加了一個A類 - B類代碼示例。 – Hoodai
這仍然很難理解。讓我們調用你正在呈現的變體1和2的兩個初始化器。在你的示例代碼中,你將展示如何使用變體2來創建一個'UIButton'實例。我不明白你爲什麼不能對變體1做同樣的事情。另外,你在說「我希望能夠將A類的實例更改爲B類」。這是否意味着你不能控制的東西正在創建'A'的實例,並且你想以某種方式將那些已經存在的實例改變爲'B'的實例? – herzbube