我创建了一个名为 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方法停了下来。如何在不使用合成的情况下实现这种行为?
答案 0 :(得分:1)
你不想这样做。它有很多不必要的代码,有很高的破坏风险。不要重新宣布这些方法。是否有特定原因需要这样做?
答案 1 :(得分:0)
这里的问题很简单,它被称为:INHARITANCE。
不要做inaritance但提供一些拥有UIImage的类。这将更容易,更可靠。
另一个问题是你没有说明为什么你需要在UIImage
中改变一些东西!我很确定你正试图以讨厌的方式解决一些简单的问题。
答案 2 :(得分:0)
答案是你不能做你似乎想做的事情。 MyImage是一个UIImage,意味着它隐含了UIImage的所有方法和属性。您可以添加新的,但永远不会删除现有的。
UIImage在整个系统API中使用。你究竟想通过这样做完成什么?