类扩展中声明的私有变量和属性的差异

时间:2013-08-06 08:22:57

标签: objective-c uitableview

我是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变量的方法是相同的,我是对的吗? 如果没有,使用属性比使用私有变量更好吗?

2 个答案:

答案 0 :(得分:0)

引自Apple docs,解释属性:

  

实际上,属性会减少您必须编写的冗余代码量。由于大多数访问器方法都以类似的方式实现,因此属性消除了为类中公开的每个属性实现getter和setter方法的需要。相反,您使用属性声明指定所需的行为,然后在编译时根据该声明合成实际的getter和setter方法。

在你的情况下,上述两种方式是相同的。但是,如果您想使用某些高级技术,例如 Lazy Instantiation Key-Value Observing ,您肯定需要属性。

答案 1 :(得分:0)

访问变量比访问属性更快。但是,属性为您提供了一些优势,例如键值观察(另一个对象或您的对象可以注册,以便在有人更改属性值时通知)。使用哪一个是品味和用例的问题。

如果在公共.h文件中声明属性,则其他对象可以访问该属性。如果你在公共.h文件中声明你的变量,其他对象也可以访问它(object->variable),但这非常非常糟糕,不这样做。

严格来说,你的两个例子并不相同。但是,它们相似。通常情况下,使用哪一个并不重要。使用适合您的更多。变量访问更快的事实并不是选择其中一个的好理由,除非你测量并且知道某个属性导致了性能问题(我还没有看到它,我工作在需要快速的多媒体应用上。