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