内存管理
iOS5新增了 arc(automatic reference counting) 模式,管理的是NSObject对象,不包括 int,float,char 等基本数据类型
在 mac 模式中:
局部变量存在栈中,自动销毁
对象存在于堆中,需手动销毁
retain,release,retainCount (ps. release 是减一,并不是销毁变量,销毁变量的关键是对象的引用计数为0)
一个变量: name, 四种应用方式
1> _name 直接访问成员变量
2> self->name 直接访问成员变量
3> self.name 访问 get 方法,间接访问
4> [self name] 访问 get 方法,间接访问
内存管理中( 对象调用对象)代码规范:
1. 对象有 alloc, 必须有 release
2. set 方法中: 基本数据类型:直接赋值 _name=name;
OC 对象类型:判断, release,retain
if(car!=_car){
[_car release];
car=[_car retain];
}
3.delloc方法:
释放调用的 OC 对象:[_car release];
调用[super delloc];
@property() 中的参数类型
1)set 方法中的内存管理
retain:release 旧值, retain 新值(OC 对象)
assign:直接赋值(默认,非 OC类型)
copy:release 旧值,copy 新值
2)是否生成 set 方法:
readwrite:同时生成 setter 和getter 声明,实现(默认)
readonly:只生成 getter 声明,实现
3)多线程管理
atomic: 默认
nonatomic:性能高
4)setter 和 getter 方法名称
在@ property 参数中,修改对象/变量的 set,get方法名称:@ property(getter=xxx, setter=setXxx:) int abc;
一般用在 bool 类型中 (getter=isXxx),改
循环应用:
@class 声明一个类,告诉编译器,这是一个类名
在.h文件中用@ class 声明
在. m 文件中用#import, 调用类的方法,属性
两个对象互相引用:一个用 retain, 一个用 assign
autorelease:
返回对象本身
把对象放到一个自动释放池
当自动释放池被销毁时,池中所有对象都 release 一次
arc:
不允许写 retain,release ,retainCount
可以重写 delloc, 但不允许调用[super delloc]
在@ property 中, retain 改为 strong,
使用 arc, 好处:
不用关心对象什么时候 release,
代码量少了很多,不用手动写 release