我是Objective-C的新手,我看到了一些开源代码,如下所示:
DetailedViewController.m:
@interface DetailedViewController()
@property(nonatomic, strong) UITableView *dynamicTable;
@end
@implementation DetailedViewControll
-(void)viewDidLoad
{
[super viewDidLoad];
self.dynamicTable=[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
//configure dynamicTable
}
@end
如果我声明了dynamicTable变量并使用它如下所示:
@interface DetailedViewController()
{
// private tableview variable
UITableView *dynamicTable;
}
@end
@implementation DetailedViewControll
-(void)viewDidLoad
{
[super viewDidLoad];
dynamicTable=[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
//configure dynamicTable
}
@end
我认为上面两种使用dynamicTable变量的方法是相同的,我是对的吗? 如果没有,使用属性比使用私有变量更好吗?
答案 0 :(得分:0)
引自Apple docs,解释属性:
实际上,属性会减少您必须编写的冗余代码量。由于大多数访问器方法都以类似的方式实现,因此属性消除了为类中公开的每个属性实现getter和setter方法的需要。相反,您使用属性声明指定所需的行为,然后在编译时根据该声明合成实际的getter和setter方法。
在你的情况下,上述两种方式是相同的。但是,如果您想使用某些高级技术,例如 Lazy Instantiation 或 Key-Value Observing ,您肯定需要属性。
答案 1 :(得分:0)
访问变量比访问属性更快。但是,属性为您提供了一些优势,例如键值观察(另一个对象或您的对象可以注册,以便在有人更改属性值时通知)。使用哪一个是品味和用例的问题。
如果在公共.h
文件中声明属性,则其他对象可以访问该属性。如果你在公共.h
文件中声明你的变量,其他对象也可以访问它(object->variable
),但这非常非常糟糕,不这样做。
严格来说,你的两个例子并不相同。但是,它们相似。通常情况下,使用哪一个并不重要。使用适合您的更多。变量访问更快的事实并不是选择其中一个的好理由,除非你测量并且知道某个属性导致了性能问题(我还没有看到它,我工作在需要快速的多媒体应用上。