gpt4 book ai didi

objective-c - 在子类中覆盖初始化

转载 作者:IT老高 更新时间:2023-10-28 11:46:52 26 4
gpt4 key购买 nike

在Objective-C中,是否需要重写子类的所有继承构造函数来添加自定义初始化逻辑?

例如,对于具有自定义初始化逻辑的 UIView 子类,以下内容是否正确?

@implementation CustomUIView

- (id)init {
self = [super init];
if (self) {
[self initHelper];
}
return self;
}

- (id)initWithFrame:(CGRect)theFrame {
self = [super initWithFrame:theFrame];
if (self) {
[self initHelper];
}
return self;
}

- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
[self initHelper];
}
return self;
}

- (void) initHelper {
// Custom initialization
}

@end

最佳答案

每个 Cocoa Touch(和 Cocoa)类都有一个指定的初始化器;对于 UIView,如 in this documentation 所述,该方法是 initWithFrame:。在这种特殊情况下,您只需要覆盖 initWithFrame;所有其他调用最终将级联并命中此方法。

这超出了问题的范围,但如果你最终创建了一个带有额外参数的自定义初始化程序,你应该确保在分配 self 时为父类(super class)指定了指定的初始化程序,就像这样:

- (id)initWithFrame:(CGRect)theFrame puzzle:(Puzzle *)thePuzzle title:(NSString *)theTitle {
self = [super initWithFrame:theFrame];
if (self) {
[self setPuzzle:thePuzzle];
[self setTitle:theTitle];
[self initHelper];
}
return self;
}

关于objective-c - 在子类中覆盖初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com