编程的有效方法--实例变量的访问

1、为什么写这篇微博

  在对象外部访问实例变量时,通过属性来作,而在对象内部访问实例变量,是应该直接访问还是通过属性访问,一直存在着很大争议。要想解决这一问题,必须明白这两者实现方式的区别;

2、二者实现方式的区别

  通过直接访问的形式不经过OC的”方法派发“(以后会深入)的步骤,访问的速度较快一些。这种方式会直接访问实例变量的那块内存,而不会调用其设置方法,这样就绕过了实例变量所定义的“内存管理语义”。比如,在ARC下直接访问被Copy所定义的实例变量,它不会拷贝这个实例变量。

  如此一来,就引申出了这样的一个现象。通过直接访问实例变量的方式,不会触发KVO,因为KVO的触发是基于内存地址的改变。

  通过属性访问实例变量有助于我们排查错误,例如我们可以在setter或者getter方法中新增断点,检测引用时机;

3、二者的使用时机

  1>在对象内部访问实例变量时,应该使用直接访问来读,通过属性来写;

  2>在初始化和delloc方法中,应该使用直接访问的方式读和写;(子类中可能覆写了父类的setter方法)

  3>有时会使用惰性初始化来配置某一份数据,此时应该通过属性写入数据;(懒加载)

转载于:https://www.cnblogs.com/zhuyiios/p/5737835.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值