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

Ala*_*Hoo 0 objective-c ios

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

@property (nonatomic, strong) IBOutlet UIView *headerView;
Run Code Online (Sandbox Code Playgroud)

然后我重写其getter函数,-(UIView*)headerView(){...}从主bundle获取一些资源.

在下面的代码中,我需要在加载资源后将属性"headerView"设置为其他视图的子视图.这是代码无法加载资源.

[self.tableView setTableHeaderView:_headerView];
Run Code Online (Sandbox Code Playgroud)

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

[self.tableView setTableHeaderView:self.headerView];
Run Code Online (Sandbox Code Playgroud)

它现在有效......

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

The*_*Art 5

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