直接访问和属性访问区别:
1.属性访问其实本质是调用存取方法 存取方法内对实例变量进行赋值或者取值 直接访问会更加快
2.直接访问不会触发属性的内存语义特性
3.直接访问不会触发键值观察
4.利用属性访问 方便断点 监控实例变量的存取时机
由于以上几点比较好的方案是:
设置实例变量时用 属性来设置(出去几种特殊情况)
访问实例变量是直接访问
几种特殊情况:
1.在init中不要用属性访问实例变量 因为可能会触发虚机制 如果子类也重写了存取方法 则会调用子类的存取方法(这可能不是我们期望的 因为初始化父类初始化自己的内容 和 父类的内容 如果调用了子类的方法初始化 父类的实例变量会出问题 )比如 子类可能会判断传入的参数 是否符合某个格式 不符合抛出异常 如果用属性访问 则会抛出异常
2.子类如果想要访问父类的实例变量 但是又不能直接访问的话 就只能用属性访问
3.惰性初始化 这个一定要用属性访问的 (惰性初始化就是在第一次使用的时候 创建这个对象 也就是在getter方法中alloc init出对象)