MVC的主要原则之一是视图应该从不拥有数据。这个原则在WWDC Session 116中重复了很多次。但是为什么UIImageView
(一个视图)拥有UIImage
(模型)?它不违反上述原则吗?
或者我在这里误解了什么?也许只是因为UIImageView
具有image
属性并不意味着它拥有UIImage
?
答案 0 :(得分:7)
单词 own 通常仅用于表示一个对象保留了另一个对象。显然,显示图像的视图应该保留该图像,只要它需要它。但是这种“所有权”的概念非常有限,并不意味着视图应该负责存储,更改或以其他方式管理图像。
答案 1 :(得分:4)
好问题。在我看来,UIImageView并不“拥有”UIImage,但它显然需要引用它。 UIImageView不会实例化图像。
对于具有文本属性(模型)的UILabel(视图),可以使用相同的参数。
答案 2 :(得分:1)
从技术上讲,UIImageView
不拥有图像,它会保留对图像的副本的引用,以便能够有效地呈现它。 UIImage
恰好是不可变的,因此副本与原始副本相同。
UILabel
行为相同,但明确声明其text
属性为copy
。