我在其实现文件中为类定义了一个属性。
@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之间有什么区别吗?我认为它们与不同方面的属性相同。
答案 0 :(得分:5)
属性由Objective-C中的实例变量支持。实际上,@property
默认情况下会生成一个getter和setter方法,您可以通过self.property
进行访问。如果您使用_property
,则绕过setter和getter并直接跳转到实例变量。您应该直接使用实例变量的唯一时间是init
/ dealloc
,或者当您需要绕过某人可能已经在getter / setter方法中实现的副作用时。否则,您应始终使用self.property
而不是_property
来访问和设置变量。