例如:
UIImageView * imageView = [[MyCustomImageView alloc] init];
这样做有什么好处?为什么不呢?:
MyCustomImageView * imageView = [[MyCustomImageView alloc] init];
答案 0 :(得分:4)
好处是您可以隐藏自己和外部的实施细节。
如果你要从一个方法中返回这个值,那么外面可能不关心它是什么样的图像视图 - 只要它是某种形式的!如果它是您正在创建的私有类,您甚至可能不希望将此类存在于外部。
在具有适当接口的其他语言中,这是一种更为人熟知的模式。 This article是一本很好的读物。
答案 1 :(得分:0)
两者都有重要用途。在这两种情况下,我都假设MyCustomImageView继承自UIImageView ...
UIImageView * imageView = [[MyCustomImageView alloc] init];
通过覆盖公共方法和属性以及仅覆盖公共方法和属性,可以使用其父对象的不同对象来扩展UIImageView的标准功能。例如,您可以通过在视图控制器中实现MyCustomImageView layoutSubviews或drawRect而不提供其他逻辑来提供完全不同的图像显示。
MyCustomImageView * imageView = [[MyCustomImageView alloc] init];
使用声明指向MyCustomImageView的指针,您可以覆盖公共方法并声明应用程序所需的新属性和方法,如invertImage,blinkImage等。