gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 11:18:14 25 4
gpt4 key购买 nike

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

我正在对 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/

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