美文网首页
懒加载,点语法,下划线

懒加载,点语法,下划线

作者: 常义 | 来源:发表于2018-04-27 15:38 被阅读14次

懒加载

也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法;

//懒加载——
- (NSMutableArray *)users   // 1部分                              
{   
    if (!_users) {    // 2部分
        _users = [NSMutableArray array];  // 3部分
    }
    return _users;  // 4部分
}
第一部分:self.users是一个getter
第二部分:不能写成!self.users这也是一个getter,getter中有getter会造成死循环
第三部分:可以使用self.users,这是一个setter
第四部分:不能使用self.users,这也是一个getter,getter中有getter会造成死循环

- (UIButton *)cover {
   // 问题(1),这里为什么不能能用self.cover?
    if (_cover == nil) {
        // _cover 可用 self.cover代替,即setter方法,注意不是getter方法
        _cover = [[UIButton alloc] initWithFrame:self.bounds];
        // 同时用到了setter和getter方法
        self.cover.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
        [self addSubview:_cover];
        // 同时用到了setter和getter方法
        self.cover.alpha = 0.0;
        // 只用到了getter方法
        [self.cover addTarget:self action:@selector(smallImage:) forControlEvents:UIControlEventTouchUpInside];
    }
    // 问题(2),花括号中,为什么能同时使用self.cover和_cover
    return _cover;// 问题(3),这里为什么不能能用self.cover?
}
解析:
问题(1)和(3):当我们通过self.cover的形式来访问对应的getter方法时,就会进入到 - (UIButton *)cover方法。所以,如果在(1)处使用 if (self.cover == nil );时,逻辑上行不通,因为你在调用self.cover时,会再一次进入这个方法,理论上就会造成死循环;而_cover是直接值访问的,它不会调用getter/setter方法,所以就不会有这个问题。(3)处同理。
问题(2):(2)处花括号的代码,两种方式可以同时使用,原因是:首先,能进入(2)处花括号的代码段,就代表已经设置了_cover的初值,并且此时的 _cover已经非空,随后的self.cover.backgroundColor等 虽然用到了cover的getter方法,但是由于此时的_cover已经是非空了,所以虽然也会进入getter方法,但是它已经不等于nil了,会直接返回它本身,即_cover,所以没有问题;(建议:懒加载时,最好不要使用点语法)@return 懒加载写的是其get方法;

相关文章

  • 懒加载,点语法,下划线

    懒加载 也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法;

  • iOS - lazyLoad懒加载

    懒加载:需要的时候再去加载,并且只加载一次 原理:重写get方法 注意:在懒加载的过程中,不可用点语法,用点语法相...

  • js short-code-sheet

    add between to Number 保留锚点的下划线,又不跳转 禁用浏览器后退 导出Excel 导入懒加载

  • Swift/OC懒加载(lazy)

    oc懒加载 oc懒加载机制充分使用了oc点语法的特性。举个例子 上面这个例子定义了view属性,当MyView被创...

  • 2021-04-23

    .点语法和_下划线 .点语法:调用属性的setter/getter方法,而不是直接访问成员变量。 下划线:只是访问...

  • swift语法-13懒加载

    swift语法-13懒加载 格式 实质 懒加载的写法本质上就是定义并执行一个闭包 只有外界访问到listData的...

  • Swift 一懒加载

    在swift里懒加载都是以闭包语法存在 private var testImageView: UIImageVie...

  • 懒加载

    知识点 webpack代码拆分动态倒入懒加载 1.懒加载 懒加载我们都知道,不即时加载所有资源,而是在需要的时候才...

  • Swift中的懒加载

    在OC中写代码时,为了节省内存的占用,我们常常用到懒加载,现在转手写Swift用到懒加载,语法和OC还有些许出入,...

  • .点语法和_下划线

    点语法 点语法是对属性的访问,经过oc消息派发,可以完成属性所定义的“内存管理语义”, 包含set和get...

网友评论

      本文标题:懒加载,点语法,下划线

      本文链接:https://www.haomeiwen.com/subject/txzblftx.html