成员变量和属性@property

oc是没有私有属性的,即使是写在.m文件中,又有@private修饰,也可以通过setValueforKey来实现赋值和修改。放在.m里面只是增加他的隐蔽性。
所以同在.m文件中的成员变量和属性有什么区别呢?
1.访问方式
比如_name和self.name
_name访问的时候,在程序编译期间就知道他的内存地址,运行时直接去该地址访问变量;
self.name是在运行时通过消息机制动态访问变量的,点语法调用的是属性的getter或者setter方法。
_name的性能更好,但是有一个隐患,比如用runtime机制在运行的过程中动态的添加成员变量,如果这个成员变量的内存地址在_name的前面,那么用这种硬编码方式就是会出错。
(解释_name如何寻址:对象布局在编译期的时候已经固定了,只要碰到访问_name的代码,编译器就会把它替换成偏移量,这个偏移量是硬编码。表示该变量距离存放对象的内存区域的起始地址有多远)

所以,如果是需要外部对象访问的,用属性比较方便,成员变量可以记录对象内部的状态改变。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值