【发布时间】:2012-07-27 23:56:34
【问题描述】:
在创建objective-c 类的过程中,我没有找到UIImageView 的选项可以从下拉列表中选择。我正在使用 xcode 4.3。我想知道我们是否允许扩展 UIImageView 类。
或者我必须继承 UIView 吗?自定义 UIImageView 类的任何示例结构都会有所帮助。
【问题讨论】:
标签: iphone uiimageview
在创建objective-c 类的过程中,我没有找到UIImageView 的选项可以从下拉列表中选择。我正在使用 xcode 4.3。我想知道我们是否允许扩展 UIImageView 类。
或者我必须继承 UIView 吗?自定义 UIImageView 类的任何示例结构都会有所帮助。
【问题讨论】:
标签: iphone uiimageview
你可以继承 UIImageView。 即使 qegal 的答案包含很多您应该记住的正确内容,只需将光标放在下拉列表中并开始输入您想要继承的任何类的名称,它就会开始自动完成。
【讨论】:
我认为继承 UIImageView 被认为是不好的做法。如果您查看this 问题,有很多示例说明您为什么不应该这样做:
Gang of Fours 设计模式理念的一部分是“优先考虑‘对象组合’而不是‘类继承’。”这减少了对象之间的紧密耦合。那么更改一个类将对系统中的其他类产生较小的影响。这使得更改更容易,从而使系统更稳定、更易于维护。
它继承 UIView 的原因是,例如,您应该在下载图像时显示 UIActivityIndicator。他们没有在他们的示例中显示这一点,但我已经使用了这段代码,它真的很好。另请查看这篇文章的 cmets,您会发现更多代码示例,还包括一些缓存和不错的东西。
但是,可以继承 UIImageView。看看这个question。
上述问题中建议的一个很好的替代方法是使用类别而不是子类化 UIImageView:
- 我建议使用Objective-C“类别”而不是继承UIImageView。只要您不必添加任何成员变量,Category 就是更好的解决方案。当您使用类别时,您可以在原始类的任何实例(在您的情况下为 UIImageView)上调用您的扩展函数。这消除了您在任何可能想要使用新函数的地方有意识地使用子类的需要。
希望这会有所帮助!
【讨论】: