iphone - @property 是 Interface Builder 所必需的吗?

标签 iphone objective-c cocoa-touch uikit interface-builder

在我的 UIViewController 子类中,我有 3 个 UIView,每个都有一个 @property 作为 IBOutlet .我根本不在我的代码中使用这些属性。 View 在创建 View Controller 后立即实例化,并在 View Controller 被释放时被释放。

我在想;我不能只删除 @property 吗?我做到了,而且我仍然可以在 Interface Builder 中连接我的实例变量(使用 IBOutlet)。

所以我现在的问题是; 属性与 Interface Builder 结合使用是否有任何用处,或者是否可以将它们排除在外?是否需要进行某些内存管理或其他操作?或者它们真的只是用于您自己的代码?

如果我确实将它们排除在外,我是否仍需要在 dealloc释放它们?

最佳答案

它们不是必需的,但由于它们明确了内存管理这一简单事实而受到强烈鼓励。

例如,如果您通过 ivar 声明一个 outlet,那么它的保留策略是什么?是否保留?它是自动发布的吗?你是主人吗?其他人也拥有它吗?那里有很多歧义(尤其是那些该死的顶级对象,它们在 Mac 上的行为与在 iPhone 上的行为不同)。

另一方面,如果您通过属性声明导出,则没有歧义,因为内存管理策略直接在声明中说明。除了属性的存在之外,nib 解档将看到 setter 并使用它,从而确保转移对象所有权等不会发生任何奇怪的事情。

简而言之,您可以在不使用 @property 的情况下声明导出(在 10.5 中引入它们之前我们都必须这样做),但是没有充分的理由 使用它们。他们确实使代码更加清楚到底发生了什么。

有关 nib 对象内存管理的荒谬性的更多信息,check out this page in the documentation .

关于iphone - @property 是 Interface Builder 所必需的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579699/

相关文章:

iphone - 使用 ccTouchesMoved 方法 move CCCamera? (cocos2d、iPhone)

ios - 从 Apple 应用内购买收据获取订阅付款历史记录

ios - iPad Mini 后台刷新不起作用,其他运行 iOS 8.1 的设备工作正常

cocoa-touch - UITextField 不会显示清除按钮

iphone - 在 iPad 上播放声音,使用 AudioToolbox

ios - 在 MapView 中搜索注释

ios - fetchRequest 返回空数组

objective-c - NSTableView 中的 cocoa 自定义单元格 : NSCell subclassing leak

objective-c - 街道地址验证

iphone - 设置 View 的边界会改变框架的坐标,为什么?