我正在寻找有关如何处理这种情况的一般指导。这是一个具体的例子。
我正在对 UIImageView 进行子类化,我想重写 initWithImage 以在使用提供的图像让父类(super class)初始化自身后添加我自己的初始化代码。
但是,UIImageView 没有文档化的指定初始化器,所以我应该调用哪个父类(super class)初始化器来确保我的子类被正确初始化?
如果一个类没有指定初始化器,我是否:
- 假设调用任何类的 (UIImageView) 初始值设定项是安全的?
- 查看指定初始化程序的父类(super class) (UIView)?
在这种情况下,#1 似乎是答案,因为在我重写的初始化程序中执行以下操作很有意义:
- (id)initWithImage:(UIImage *)image
{
self = [super initWithImage:image];
if (self) {
// DO MY EXTRA INITIALIZATION HERE
}
return self;
}
最佳答案
UIImageView 有两个初始化器,因此您可能希望确保您的子类处理这两个初始化路径。
您可以简单地声明 -initWithImage:
是您指定的初始化器,不支持所有其他初始化器。
此外,您可以实现 -initWithImage:highlightedImage:
并抛出异常以指示它不受支持。
或者,您可以将 -initWithImage:highlightedImage:
声明为您的指定初始化程序,并让 -initWithImage:
调用您的指定初始化程序。
或者,您可能会发现无论您的类是使用 -initWithImage:
还是 -initWithImage:highlightedImage 初始化的,您的
。-initWithImage:
初始化程序都会被调用:
关于objective-c - 如果一个类没有文档化的指定初始化器怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146901/