0

我是 Objective-C 的新手,我看到了一些开源代码,如下所示:

详细视图控制器.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 变量的方式是相等的,对吗?
如果不是,使用属性是否比使用私有变量更好?

4

2 回答 2

0

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

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

所以严格来说,你的两个例子是不相等的。然而,它们是相似的。很多时候,你使用哪一个并不重要。使用更适合您的。变量访问速度更快的事实并不是选择一个而不是另一个的好理由,除非您测量并知道某个属性会导致性能问题(我还没有看到这一点,我正在处理需要的多媒体应用程序)快速地)。

于 2013-08-06T11:00:59.020 回答
0

引自Apple docs,解释属性:

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

在您的情况下,上述两种方式是相等的。但是如果你想使用一些高级技术,比如 延迟实例化键值观察,你肯定需要属性。

于 2013-08-06T08:31:30.683 回答