【发布时间】:2012-10-30 20:13:46
【问题描述】:
我正在寻找有关如何处理这种情况的一般指导。这是一个具体的例子。
我是 UIImageView 的子类,并且我想重写 initWithImage 以在使用提供的图像初始化超类本身之后添加我自己的初始化代码。
但是,对于 UIImageView 没有记录的指定初始化程序,所以我应该调用哪个超类初始化程序来确保我的子类被正确初始化?
如果一个类没有指定初始化器,我应该:
- 假设调用任何类的 (UIImageView) 初始化程序是安全的?
- 查看指定初始化程序的超类 (UIView)?
在这种情况下,#1 似乎是答案,因为在我的重写初始化程序中执行以下操作是有意义的:
- (id)initWithImage:(UIImage *)image
{
self = [super initWithImage:image];
if (self) {
// DO MY EXTRA INITIALIZATION HERE
}
return self;
}
【问题讨论】:
-
这对我来说很好。您正在调用超类的初始化程序。问题是什么? Objective-C 不提供调用指定超类的初始化程序的机制。 (AFAIK)
-
UIImageView 将是您的超类。您可以调用(使用
super)该类的任何有效初始化程序,包括它可能继承的初始化程序(尽管其中一些可能没有意义)。 -
这确实工作正常,但我的问题更笼统。我的理解是子类应该总是调用超类的指定初始化程序,但是如果没有记录,我怎么知道指定初始化程序是什么?如果没有任何东西被标记为“指定”,那么调用超类中的任何初始化程序是否安全?
-
不知道您所说的“指定”是什么意思。您必须调用超类的初始化器*,但没有一个是“指定”的。
标签: objective-c ios cocoa-touch