为什么UIImageView拥有UIImage。它违反了MVC原则吗?

时间:2012-02-09 17:38:41

标签: objective-c ios model-view-controller uiimageview uiimage

MVC的主要原则之一是视图应该从不拥有数据。这个原则在WWDC Session 116中重复了很多次。但是为什么UIImageView(一个视图)拥有UIImage(模型)?它不违反上述原则吗?

或者我在这里误解了什么?也许只是因为UIImageView具有image属性并不意味着它拥有UIImage

3 个答案:

答案 0 :(得分:7)

单词 own 通常仅用于表示一个对象保留了另一个对象。显然,显示图像的视图应该保留该图像,只要它需要它。但是这种“所有权”的概念非常有限,并不意味着视图应该负责存储,更改或以其他方式管理图像。

答案 1 :(得分:4)

好问题。在我看来,UIImageView并不“拥有”UIImage,但它显然需要引用它。 UIImageView不会实例化图像。

对于具有文本属性(模型)的UILabel(视图),可以使用相同的参数。

答案 2 :(得分:1)

从技术上讲,UIImageView不拥有图像,它会保留对图像的副本的引用,以便能够有效地呈现它。 UIImage恰好是不可变的,因此副本与原始副本相同。

UILabel行为相同,但明确声明其text属性为copy