3 属性与实例变量
来源:互联网 发布:java复试 编辑:程序博客网 时间:2024/05/22 17:07
类型成员
数据成员
*注意,可以用属性访问的情况下,尽量不要直接访问实例变量,否则引用可能会有内存管理问题出现。
初始化和析构器以及自定义访问器方法中才直接访问实例变量。因为这引用类型有内存管理附加方法,但是这三个方法的生存周期比较特殊,因此不会出现问题。
// @property 类型 [类类型需要'*'号,值类型不需要] 属性名称;@property NSString * name;@property int age;// 可以自定义访问器方法@property (getter=giveName, setter=setName) NSString * name;/* OC中并不支持类属性。但是可以可以通过C语言方法模拟一个类属性。 */static int _max = 100;+(int)max { return _max}+(void)setMax:(int)newValue { _max = newValue}// 可以直接定义实例对象,但是就只有类内可以访问了。@implementation CustomClass { int _age;}@end
实例变量
实例变量一般都是私有的,但是可以通过@public
让他公有化,但是,很少见。
@interface Shape : NSObject { @public int _data;}// 访问时,以类似C语言的风格进行shape->_data = 10
生存周期
atomic:
atomic属性可以确保在多线程情况下,不会同时有多个线程对属性进行操作。
weak:
ARC机制之下。通过自动引用计数来决定对象是否可以被释放。
如果两个对象之间相互引用,在该对象从栈上释放之后,由于在堆中任然有指针指向他们,所以他们的自动引用计数会一直大于0,因此无法被释放。
因此需要对这种情况下的对象使用(weak)描述特性,使用了weak之后,该指针不会增加自动引用计数,因此可以阻止循环引用。
copy:
正常情况下,对象之间的赋值其实是对指针的拷贝,因此赋值之后,赋值对象与被赋值对象其实是指向同一个堆的位置,当其中之一进行数据操作之后,其他对象也会被影响。
而加了copy之后,再进行赋值的时候,会对赋值对象进行深拷贝并传递拷贝出来的新内容给被赋值对象。这种情况下,会在堆中新建新的内容,因此不会相互影响。
0 0
- 3 属性与实例变量
- 属性与实例变量--笔记9.12
- 实例变量与属性:私有变量与私有方法
- python的类变量与实例变量以及__dict__属性
- python的类变量与实例变量以及__dict__属性
- python的类变量与实例变量以及__dict__属性
- python的类变量与实例变量及__dict__属性
- python的类变量与实例变量以及__dict__属性
- 实例变量和属性
- 实例变量(instance var)与属性(@property)的关系
- OC 中实例变量与属性之间的区别
- ios中实例变量与属性的区别
- OC 实例变量(instance var)与属性(@property)的关系
- 属性,点语法,实例变量
- ruby 实例变量 和属性
- 实例变量和属性 区别
- 实例变量 属性 self 方法
- ios属性和实例变量
- iOS开发多线程篇—GCD的常见用法
- 花生壳内网版的原理是什么呢?
- 图片剪裁
- iOS开发 根据某个日期计算是星期几
- java获取properties配置文件中的信息
- 3 属性与实例变量
- Zoho Survey:如何提高你的问卷反馈率
- Codeforces Round #341 (Div. 2) CF621B. Wet Shark and Bishops(排列组合+对角线规律)
- HDU1213并查集
- Storm搭建
- 权限系统设计
- RAC挂载共享磁盘组
- jquery常用事件
- mysql处理海量数据时的一些优化查询速度方法