3 属性与实例变量
2016-02-01 16:41
239 查看
类型成员
数据成员
*注意,可以用属性访问的情况下,尽量不要直接访问实例变量,否则引用可能会有内存管理问题出现。初始化和析构器以及自定义访问器方法中才直接访问实例变量。因为这引用类型有内存管理附加方法,但是这三个方法的生存周期比较特殊,因此不会出现问题。
// @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之后,再进行赋值的时候,会对赋值对象进行深拷贝并传递拷贝出来的新内容给被赋值对象。这种情况下,会在堆中新
4000
建新的内容,因此不会相互影响。
相关文章推荐
- 我是运营,我没有假期
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- 交换机升级排障实例
- 修复mysql数据库
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- MySQL数据备份之mysqldump的使用详解
- C#实现窗体间传递数据实例
- 给你的数据库文件减肥
- Oracle数据更改后出错的解决方法
- Oracle数据库数据丢失恢复的几种方法总结
- sql2008启动代理未将对象应用到实例解决方案
- C#将Sql数据保存到Excel文件中的方法
- C#实例代码之抽奖升级版可以经表格数据导入数据库,抽奖设置,补抽
- MFC实现在文件尾追加数据的方法
- 把excel表格里的数据导入sql数据库的两种方法
- 用文本作数据处理
- 桌面中心(一)创建数据库