成员变量和属性@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的代码,编译器就会把它替换成偏移量,这个偏移量是硬编码。表示该变量距离存放对象的内存区域的起始地址有多远)
所以,如果是需要外部对象访问的,用属性比较方便,成员变量可以记录对象内部的状态改变。
相关文章推荐
- 属性( @property )与成员变量的那些事 :
- 关于ios成员变量和属性@property区别
- OC 成员变量和属性的区别
- iOS笔记之成员变量及属性变量
- 属性和成员变量
- iOS中属性与成员变量的区别
- 使用属性代替可访问的成员变量
- ios 成员变量 属性
- 属性和成员变量在.h文件和.m文件区别
- Objective-C之成魔之路【8-访问成员变量和属性】
- 让Category支持添加属性与成员变量【转载】
- Objective-C的属性和成员变量用法及关系浅析
- 转载,自用,iOS中成员变量和属性的区别
- 让Category支持添加属性与成员变量
- Python学习笔记【week03day2上】self,类变量,成员变量,动态属性&方法,成员方法,类方法,静态方法
- iOS中属性与成员变量的区别
- IOS之成员变量,属性变量,局部变量,实例变量,全局变量
- @property和@synthesize可以自动生成某个类成员变量的存取方法
- 类和对象(字段=变量、方法=函数、方法重载、静态成员、属性、构造函数)
- iOS开发--成员变量与属性