【发布时间】:2010-06-10 08:37:30
【问题描述】:
Apple,对于内存管理问题,建议在属性上定义插座,而不是在属性声明中。但是,据我所知,声明属性会将类暴露给外部类,所以这可能很危险。
在 UIViewController 上,我们有主视图定义和逻辑,所以在这种情况下,MVC 有点欺骗。
什么是更好的方法,Apples 对内存管理或装甲类的建议?
【问题讨论】:
标签: iphone memory-management properties
Apple,对于内存管理问题,建议在属性上定义插座,而不是在属性声明中。但是,据我所知,声明属性会将类暴露给外部类,所以这可能很危险。
在 UIViewController 上,我们有主视图定义和逻辑,所以在这种情况下,MVC 有点欺骗。
什么是更好的方法,Apples 对内存管理或装甲类的建议?
【问题讨论】:
标签: iphone memory-management properties
MVC 不会被UIViewController 欺骗,因为该类实现了一个控制器。它定义了 View 对象(通常存储在 XIB 中)和 Model 对象(有时是 Core Data 实体,有时是其他东西)之间的连接。
无论如何。将 outlet 定义为属性的要点是,您可以在类接口中明确说明属性的内存管理要求是什么。如果存在访问器,NIB 加载机制将使用它们,因此如果您定义了一个保留属性,则出口将被保留。如果找不到访问器,它将直接设置实例变量。
您是否为网点定义属性实际上是个人喜好问题。我这样做了,因为插座是由外部对象(NSBundle 类)设置的,所以在我看来代表了我的视图控制器的 API 合同的一部分。
【讨论】:
我相信你想错了。
Outlets 仅存在于外部对象、Interface Builder 代码和 nib 解码器中,可以使用 outlet 配置类的实例。在@protected 或@private 后面隐藏一个出口会破坏他们的全部目的。
在良好的设计中这应该不是问题,因为视图控制器应该是相对轻量级的对象,其唯一功能是在视图和模型之间移动数据。应用程序的核心逻辑应该安全地封装在模型中。
如果您需要安全的设计,您可以通过编程方式创建视图并将其设为私有,但您会失去使用 outlet 获得的所有灵活性和重用性。这是一个权衡。
然而,无论哪种情况,这都与内存管理和属性无关。属性是公共的、受保护的还是私有的与属性内存的管理方式无关。
【讨论】: