标签:
内存管理:
谁retain ,谁release
谁alloc ,谁release
每一个对象在创建时都会创建一个引用计数器,系统会根据引用计数器判断对象需要不需要被回收
对象在创建时引用计数器是1
当调用retain消息 计数器 +1 返回对象本身
当调用release消息 计数器 -1
retainCount 获取计数器
当对象的计数器变0之后,当前对象就变成僵尸对象(野指针)
对象在被销毁时,系统会发送一条dealloc消息
1> 一般都会重写dealloc方法,在这里释放相关资源,所有dealloc相当于对象的遗言
2> 一旦重写dealloc方法,就必须调用[super dealloc],并且放在最后调用
- (void)dealloc{
// 其他操作
[super dealloc];
}
/*
内存管理规范
1. 只要调用alloc,必须release (autorelease)
set操作
1> 基本数据类型直接赋值
- (void)setAge:(int)age{
_age = age;
}
2> oc对象
- (void)setCar:(Car *)car
{
if ( _car != car ){
// 对以前对象进行一次release
[_car release];
// 对新对象做一次retain
_car = [car retain];
}
}
3> dealloc规范
1. 一定要[super dealloc] ,而且放到最后
2. 对当前(self)所有对象做一次release
- (void)dealloc
{
[_car release];
[super dealloc];
}
*/
利用@property自动管理内存
@property (retain) Car *car;
dealloc 还得自己写
@property参数
1. 内存管理相关的参数
l retain:release旧值,retain新值(适合oc对象)
l assign:直接赋值(适合基本数据类型,非OC对象)
l copy:retain旧值,release新值
2. 是否生成set方法
l readonly 只读
l readwrite 读写
3. 多线程
l nonatomic 性能高
l atomic性能低(默认)
4. setter,getter方法的名称
l seter自定义setter方法名
l getter自定义getter方法名
@class的作用:仅仅告诉编译器,这个就是一个类
例 @class Car // 告诉编译器Car仅仅是一个类
开发中规范
一般在.h文件中用@class告诉编译器他就是个类
在.m文件中#import “文件.h”
两端循环引用
1> 一端用retain
2> 另一端用assign
标签:
原文地址:http://www.cnblogs.com/MrTao/p/4397598.html