Effetive Objective - C 1.Objective 7.在对象内部尽量直接访问实例变量

本文探讨了在编程中属性访问与直接访问实例变量的区别。属性访问可以触发内存语义特性及值观察,便于断点监控;而直接访问更快且不触发这些特性。文章还讨论了几种特殊情况下使用这两种方式的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接访问和属性访问区别:

1.属性访问其实本质是调用存取方法  存取方法内对实例变量进行赋值或者取值 直接访问会更加快

2.直接访问不会触发属性的内存语义特性

3.直接访问不会触发键值观察

4.利用属性访问  方便断点  监控实例变量的存取时机


由于以上几点比较好的方案是:

设置实例变量时用 属性来设置(出去几种特殊情况)

访问实例变量是直接访问


几种特殊情况:

1.在init中不要用属性访问实例变量  因为可能会触发虚机制 如果子类也重写了存取方法 则会调用子类的存取方法(这可能不是我们期望的  因为初始化父类初始化自己的内容 和 父类的内容 如果调用了子类的方法初始化 父类的实例变量会出问题   )比如 子类可能会判断传入的参数 是否符合某个格式 不符合抛出异常  如果用属性访问 则会抛出异常 

2.子类如果想要访问父类的实例变量 但是又不能直接访问的话  就只能用属性访问

3.惰性初始化  这个一定要用属性访问的 (惰性初始化就是在第一次使用的时候 创建这个对象 也就是在getter方法中alloc init出对象)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值