在iOS中调用属性的getter函数时

时间:2016-01-26 15:19:39

标签: ios objective-c

我在其实现文件中为类定义了一个属性。

@property (nonatomic, strong) IBOutlet UIView *headerView;

然后我通过-(UIView*)headerView(){...}覆盖其getter函数以从主bundle获取一些资源。

在下面的代码中,我需要设置属性' headerView'加载资源后作为其他视图的子视图。以下代码无法加载资源。

[self.tableView setTableHeaderView:_headerView];

未调用Getter函数。我将属性变量更改为self.headerView:

[self.tableView setTableHeaderView:self.headerView];

现在有效......

self.xxx和_xxx之间有什么区别吗?我认为它们与不同方面的属性相同。

1 个答案:

答案 0 :(得分:5)

属性由Objective-C中的实例变量支持。实际上,@property默认情况下会生成一个getter和setter方法,您可以通过self.property进行访问。如果您使用_property,则绕过setter和getter并直接跳转到实例变量。您应该直接使用实例变量的唯一时间是init / dealloc,或者当您需要绕过某人可能已经在getter / setter方法中实现的副作用时。否则,您应始终使用self.property而不是_property来访问和设置变量。