您的位置:首页 > 运维架构

成员变量和属性@property

2015-09-09 14:55 169 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/ciweile/article/details/48316205

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: