在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;
}
https://stackoverflow.com/questions/4359617/
相关文章:
objective-c - 调用 -retainCount 被认为是有害的
iphone - viewWillAppear,viewDidAppear 没有被调用,没有触发
iphone - 关于带有文本字段的 UIAlertView...
objective-c - 使用 JSON (iOS) 的 Cocoa 错误 3840
ios - scaledValueForValue : called on a font that
ios - 在从 UIViewController 调用的非保留完成中引用 self 时,weakS
objective-c - 如何在 Objective-C 中命名常量?