从Objective C中的超类初始化子类

时间:2016-06-23 15:10:34

标签: ios objective-c oop subclass

我创建了一个名为 MyImage UIImage 子类。 MyImage 显然会响应 UIImage 最初实现的每种方法。我想完全隐藏UIImage实现,所以例如MyImage重新声明了一个类似的方法:

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;

- (MyImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets; 

我尝试编写类似的实现:

- (MyImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets {
    UIImage *original = [super resizableImageWithCapInsets:capInsets];
    MyImage *result = [[[self class] alloc] initWithUIImage:original];
    return result;
}

- (id) initWithUIImage:(UIImage *)image {
    // HOW TO IMPLEMENT THIS METHOD???
}

但我在initWithUIImage方法停了下来。如何在不使用合成的情况下实现这种行为?

3 个答案:

答案 0 :(得分:1)

你不想这样做。它有很多不必要的代码,有很高的破坏风险。不要重新宣布这些方法。是否有特定原因需要这样做?

答案 1 :(得分:0)

这里的问题很简单,它被称为:INHARITANCE。

不要做inaritance但提供一些拥有UIImage的类。这将更容易,更可靠。

另一个问题是你没有说明为什么你需要在UIImage中改变一些东西!我很确定你正试图以讨厌的方式解决一些简单的问题。

答案 2 :(得分:0)

答案是你不能做你似乎想做的事情。 MyImage是一个UIImage,意味着它隐含了UIImage的所有方法和属性。您可以添加新的,但永远不会删除现有的。

UIImage在整个系统API中使用。你究竟想通过这样做完成什么?