对于内存管理问题,Apple建议在属性上定义出口,而不是在属性声明中。但是,据我所知,声明属性会将类暴露给外部类,因此这可能是危险的。
在UIViewController上,我们有主要的视图定义和逻辑,因此MVC在这种情况下被稍微欺骗了。
什么是更好的方法,苹果对内存管理或装甲类的建议?
发布于 2010-06-10 08:55:34
MVC没有被UIViewController欺骗,因为该类实现了Controller。它定义了视图对象(通常存储在XIB中)和模型对象(有时是核心数据实体,有时是其他东西)之间的连接。
不管怎么说。将出口定义为属性的要点是,您可以在类接口中显式地说明属性上的内存管理需求。如果存在访问器,则NIB加载机制将使用这些访问器,因此,如果您定义了retain属性,则出口将被保留。如果它找不到访问器,它将直接设置实例变量。
无论你是否为你的店面定义属性,都是个人品味的问题。我是这样做的,因为出口是由一个外部对象( NSBundle类)设置的,所以在我看来,它代表了我的视图控制器API契约的一部分。
发布于 2010-06-10 14:02:37
我相信你想错了。
仅存在出口,以便外部对象、接口生成器代码和nib解码器可以使用这些出口配置类的实例。把一个出口藏在“保护”或“私人”后面,就会破坏他们的全部目的。
在良好的设计中,这不应该是一个问题,因为视图控制器应该是相对轻量级的对象,其唯一的功能是在视图和模型之间移动数据。应用程序的核心逻辑应该安全地封装在模型中。
如果您需要一个安全的设计,您可以通过编程方式创建视图,并将其设置为私有视图,但您将失去通过出口获得的所有灵活性和重用性。这是一种权衡。
然而,在这两种情况下,这都与内存管理和属性无关。属性是公共的、受保护的还是私有的,与如何管理属性内存无关。
https://stackoverflow.com/questions/3012848
复制相似问题