OC中变量的下划线访问

在学习OC开始,就在别人的Demo中看到,有些时候变量是用_property进行访问,有些时候使用self.property进行访问。一直也没有去细究过里面的问题。本着能用就用,并且苹果官方提倡的是使用self来对实例变量进行访问的原因,就一直没去研究。

今天在学习kxmovie的库的时候,就顺带搜了一下资料。下划线加变量名的话,只是直接设置了变量的值。而通过self来访问的话,是调用了getter和setter方法

e.g

// ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController: UIViewController
@property (nonatomic, strong) NSString *exampleString;
@end

// ViewController.m
@implementation ViewController
- (void)viewDidLoad {
  _exampleString = @"Test";
  NSLog(@"%@", _exampleString);
  NSLog(@"%@", self.exampleString);
}
@end
复制代码

上面的代码中,两个输出值都是Test

// 如果设置了Getter
- (NSString *)exampleString {
  return @"Getter Method";
}
复制代码

设置了Getter方法的话,第一个输出仍然是Test,但是第二个输出就会变成了Getter Method

// 如果设置了Setter
- (void)setExampleString:(NSString *)exampleString {
  if ([_exampleString isEqualToString:@"Test"]) {
    _exampleString = @"Setter";
  }
}
复制代码

设置了Setter的话,此时两个输出都会变成Setter。因为在setter方法中也修改了_exampleString的值。

所以,下划线加变量名对变量进行访问的话,只是简单的设置和读取值。使用self的话,是利用getter和setter进行访问的。

另外,如果设置了Getter方法的话,就不能使用下划线加变量名进行访问,Xcode会报Use of undeclared identifier的错误。可能因为这个原因,所以比较久以前的代码中,能看到作者在.h文件中生命了私有的下划线变量,又声明了property的实例变量。

转载于:https://juejin.im/post/5a30dfbd518825585132b032

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值