美文网首页selector
通过self和下划线访问实例变量的区别

通过self和下划线访问实例变量的区别

作者: memelook | 来源:发表于2018-01-03 19:39 被阅读16次

self可以理解为通过设置方法访问,下划线即是直接访问

直接访问实例变量的影响:

1).不经过OC的方法派发(method dispatch),所以直接访问实例变量的速度当然比较快。这种情况下,书编译器生成的代码会直接访问保存对象实例变量的那块内存
2).不会调用其"设置方法",这就绕过了为相关属性所定义的"内存管理语义"。比如被声明为copy的属性,那么它不会拷贝其属性,智慧保留新值并释放旧值。
3).不会触发KVO

合理的使用方案:

写入实例变量时,通过设置方法,读取实例变量时,则直接访问。这样既能提高读取操作速度,又能控制对属性的操作

必须使用直接访问的情况:

1).初始化以及delloc方法中,直接通过实例变量来读写数据
当父类的set方法被子类复写了,那么父类调用set方法的时候就会调用子类的。所以应该在初始化的时候,不要使用设置方法(self)去读写
待验证
2).惰式初始化。某些情况下,此属性不常用,创建成本较高,所以我们会将改属性的操作封装在set或get方法里。所以我们使用的时候就需要使用设置方法访问

- (EOCBrain *)brain{
    if(!_brain){
        _brain = [Brain new];
        .....
        .....
    }
    return _brain
}

相关文章

  • OC 语法

    下划线和self.的区别 1.通过self. 访问,包含了set和get方法。通过下划线是获取自己的实例变量,不包...

  • iOS小知识点总结

    iOS中的self访问对象属性和下划线实例变量的区别 具体见:[告诉你使用self.var 和 _var的区别][...

  • 通过self和下划线访问实例变量的区别

    self可以理解为通过设置方法访问,下划线即是直接访问 直接访问实例变量的影响: 1).不经过OC的方法派发(me...

  • OC中下划线和self.的区别

    1.通过self. 访问,包含了set和get方法。通过下划线是获取自己的实例变量,不包含set和get的方法。 ...

  • iOS的self.xx和_.xx的区别

    通过self.xxx 访问的方法的引用,包含了set和get方法。而通过ios 属性下划线是获取自己的实例变量,不...

  • [iOS]iOS中self和_下划线的区别

    1.首先通过self. 通过访问的方法的引用:包含了set和get方法。 但是,通过下划线是获取自己的实例变量,不...

  • iOS中self.和下划线的区别

    1.首先通过self.xxx 通过访问的方法的引用:包含了set和get方法。而通过下划线是获取自己的实例变量...

  • iOS中_(下划线)和self.的区别

    1.首先通过self. 通过访问的方法的引用:包含了set和get方法。但是,通过下划线是获取自己的实例变量,不包...

  • iOS中self.和下划线的区别

    1.首先通过self.xxx 通过访问的方法的引用:包含了set和get方法。而通过下划线是获取自己的实例变量,不...

  • iOS之self.xxx与_xxx的区别

    1.首先通过self.xxx 通过访问的方法的引用:包含了set和get方法。而通过下划线是获取自己的实例变量,不...

网友评论

    本文标题:通过self和下划线访问实例变量的区别

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