懒加载及self.和下划线区别

0x00 懒加载
    ​被声明为属性的成员,在ios5之前需要使用编译器指令@synthesize告诉编译器帮助生成属性的getter,setter方法。之后会默认生成。编译器在生成getter,setter方法时先检查有没有自定义getter,setter方法,如果有则使用自定义的,没有才生成。
    懒加载就是重写属性的getter方法,然后加一个判断,为空则赋值,不为空则返回。代码如下:
 
 
  1. @interface ViewController ()

  2. @property (nonatomic, copy) NSString *mtest;

  3. @end

  4. @implementation ViewController

  5. // 懒加载

  6. -(NSString *)mtest {

  7.    if (_mtest == nil) {

  8.        _mtest = @"aaa";

  9.    }

  10.    return _mtest;

  11. }

  12. - (void)viewDidLoad {

  13.    [super viewDidLoad];

  14.    NSLog(@"%@", self.mtest);

  15. }

  16. @end

0x01 self.mtest和_mtest的区别
    ​在第一次使用时由于没注意到两者的区别,在setter方法中调用self.mtest,结果导致了setter方法的循环调用。写法如下:
  
  
  1. // 错误写法

  2. ​-(NSString *)mtest {

  3. if (self.mtest == nil) {
  4. self.mtest = @"aaa";
  5. }
  6. return self.mtest;
  7. }
    ​导致原因是,self.mtest会调用属性的setter方法,触发懒加载,但是_mtest只是访问一个局部变量。

    ​


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值