加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:34:11 所属栏目:百科 来源:网络整理
导读:我正在寻求如何处理这种情况的一般指导.这是一个具体的例子. 我是UIImageView的子类,我想覆盖initWithImage,在使用提供的图像拥有超类init之后添加我自己的初始化代码. 然而,没有UIImageView的文档指定的初始化程序,所以我应该调用哪个超类初始化程序来确保
我正在寻求如何处理这种情况的一般指导.这是一个具体的例子.

我是UIImageView的子类,我想覆盖initWithImage,在使用提供的图像拥有超类init之后添加我自己的初始化代码.

然而,没有UIImageView的文档指定的初始化程序,所以我应该调用哪个超类初始化程序来确保我的子类被正确初始化?

如果一个类没有指定一个初始化程序,我可以:

>假设可以安全地调用任何类的(UIImageView)初始化器?
>看看指定的初始化程序的超类(UIView)?

在这种情况下,似乎#1将是答案,因为在我重写的初始化程序中执行以下操作是有意义的:

- (id)initWithImage:(UIImage *)image
{
    self = [super initWithImage:image];
    if (self) {
        // DO MY EXTRA INITIALIZATION HERE
    }
    return self;
}

解决方法

UIImageView有两个初始化器,因此您可能需要确保您的子类处理这两个初始化路径.

您可以简单地声明-initWithImage:是您指定的初始化程序,并且不支持所有其他初始化程序.

此外,您可以实现-initWithImage:highlightImage:并抛出一个异常来表示它不受支持.

或者,您可以声明-initWithImage:highlightImage:作为您指定的初始化程序,并使用-initWithImage:调用指定的初始化程序.

或者,您可能会发现,无论您的类是使用-initWithImage初始化还是使用-initWithImage:highlightImage:,都可以调用-initWithImage:initializer.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读