@interface TheViewController : UIViewController
{
IBOutlet UITableView *table;
}
@property (nonatomic,retain) IBOutlet UITableView *table;
或者就像这样:
@interface TheViewController : UIViewController
{
}
@property (nonatomic,retain) IBOutlet UITableView *table;
它和第二个一样好吗?
有什么区别?
推荐哪个?
答案 0 :(得分:1)
它和第二个一样好吗?
一般来说,这两种语法是正确的。
有什么区别?
第二个也将为您声明ivar
,但只能正确运行较新的Objective C运行时系统。
推荐哪个?
好问题......我认为它们非常等效,前提是您可以限制自己使用较新的ObjC运行时系统。有关未明确声明ivars的可能缺点的更多提示,请查看此S.O. post。
答案 1 :(得分:1)
在Objective-C 2.0中,合成属性将根据需要自动创建相应的ivars。所以这两种语法都是正确的。This文章将为您明确说明..
答案 2 :(得分:1)
由于IBOutlet,即使在ObjC 2.0环境中,这两个也不完全相同。必须在酒店宣布。它们就像这样:
@interface TheViewController : UIViewController
{
IBOutlet UITableView *table;
}
@property (nonatomic,retain) UITableView *table;
@interface TheViewController : UIViewController
{
}
@property (nonatomic,retain) IBOutlet UITableView *table;
注意在属性定义中添加了IBOutlet。
答案 3 :(得分:0)
通常它们在Objective-C 2.0环境中是等效的,但是调试器例如,在变量视图中看不到生成的ivar作为此对象的成员,并且您将不得不通过使用gdb来请求值。使用访问器方法的命令行po
命令(尽管不是短格式点表示法)。