您的当前位置:首页正文

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

来源:华拓网

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
}