将变量声明为一个 class,并用另一个 class 为其分配内存有什么意义?

What is the point of declaring a variable as one class, and allocating memory to it with another class?

例如:

UIImageView * imageView = [[MyCustomImageView alloc] init];

这样做有什么好处?为什么不呢?:

MyCustomImageView * imageView = [[MyCustomImageView alloc] init];

好处是您可以对自己和外部隐藏实施细节。

如果你打算return这个值来自一个方法,例如,外部可能不关心它是哪种图像视图——只要它是某种它!如果您创建的是私有 class,您可能甚至不想将此 class 的存在暴露给外部。

在具有适当接口的其他语言中,这是一种更广为人知的模式。 This article 是一本好书。

两者都有重要的用途。在这两种情况下,我都假设 MyCustomImageView 继承自 UIImageView...

UIImageView * imageView = [[MyCustomImageView alloc] init];

将不同的对象分配给其父类型用于通过覆盖 public 方法和属性并仅覆盖这些来扩展 UIImageView 的标准功能。例如,您可以通过在视图控制器中不使用其他逻辑实现 MyCustomImageView layoutSubviews 或 drawRect 来提供完全不同的图像呈现。

MyCustomImageView * imageView = [[MyCustomImageView alloc] init];

通过声明指向 MyCustomImageView 的指针,您可以覆盖 public 方法并声明您的应用所需的新属性和方法,如 invertImage、blinkImage 等。