【发布时间】:2010-06-18 21:11:24
【问题描述】:
我见过很多 iPhone 示例使用 IBOutlet 作为与 Interface Builder 中的 UI 控件链接的字段,并且该字段也被定义为接口类中的属性。例如,以下代码与 Apple 示例代码类似:
// in .h file
@interface MyViewController : UIViewController {
IBOutlet UILabel* _firstName;
IBOutlet UILabel* _lastName;
...
}
@property (nonatomic, retain) UILabel* firstName;
@property (nonatomic, retain) UILabel* lastName;
...
@end
// in .m file
@implementation MyViewController {
@synthetic firstName = _firstName;
@synthetic lastName = _lastName;
...
@end
我尝试将 Interface Builder 中的标签链接到我的控制器类 IBOutlets,我可以看到 _firstName 和 _lastName。因为链接是直接从 Interface Builder 到我的接口类成员(如果我放置 @private 指令,甚至是私有的)。我需要为这些字段定义属性吗?
实际上,我尝试删除这些属性,看来我的代码工作正常。通过定义属性,我的类将它们公开。我没有任何用途或理由将它们作为我的代码内部或外部的属性。我的问题是,如果这种做法,将字段定义为属性,有必要吗?我是否错过了可能从 Objective-C 概念或框架调用的内存管理之类的东西?
【问题讨论】:
-
并且你可以在实现文件的类类别中声明属性,这样这些属性就不会暴露为公共方法。
-
另请注意,Apple 非常不鼓励在 ivars 前加上下划线,这可能会导致问题发生。我认为这是因为他们自己的内部类使用它们来避免名称冲突。
标签: iphone