objective-c - 如果一个类没有文档化的指定初始化器怎么办?

标签 objective-c ios cocoa-touch

我正在寻找有关如何处理这种情况的一般指导。这是一个具体的例子。

我正在对 UIImageView 进行子类化,我想重写 initWithImage 以在使用提供的图像让父类(super class)初始化自身后添加我自己的初始化代码。

但是,UIImageView 没有文档化的指定初始化器,所以我应该调用哪个父类(super class)初始化器来确保我的子类被正确初始化?

如果一个类没有指定初始化器,我是否:

  1. 假设调用任何类的 (UIImageView) 初始值设定项是安全的?
  2. 查看指定初始化程序的父类(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/

相关文章:

iphone - For循环和数组问题

objective-c - 如何使用 NSData 类别压缩目录?

iphone - 对核心数据实体的 NSSet 进行排序 - Objective-C

ios - 如何在 iOS 中获取正确的当前时间?

ios - Watchkit 中的 SPErrorGizmoInstallNeverFinishedErrorMessage

objective-c - 在 Objective C 中命名变量时, "http"或 "HTTP"前缀应该使用哪个?

objective-c - 向圆形 View 添加阴影

ios - AMSlideMenu 重叠状态栏?

objective-c - 为什么 mutableCopy 不能用在 NSNumber 上?

iphone - iCloud 基础知识和代码示例