内存管理
//垃圾回收机制:由系统自己管理内存,例如java
//OC2.0开始支持垃圾回收机制
//iOS不支持垃圾回收机制
//iOS是通过引用计数来管理内存
//引用计数是为0,代表此块内存可以被申请到
//引用计数不为0,代表此块内存正在被占用
//引用计数+1代表拥有这块内存
//引用计数-1,代表释放拥有权,当运用计数-1后为0时,系统回收内存
//注:对于没有拥有权或者系统收回的内存,不能进行操作
//**开发人员管理的内存,应该是堆区的内存
//和引用计数相关的方法
//+alloc:类方法,从堆区申请引用计数为0的内存,然后把引用计数置为1
retain:实例方法,把该内存的引用计数+1
release:实例方法,把该内存的引用计数-1
//autorelease:实例方法,把该内存的引用计数,在未来的某个时刻-1
//注:一般会把代码写在自动释放池中,来保证autorelease操作的内存,能够得到释放
//自定义类做copy----(深拷贝- 拷贝指针+内容)
//-copy:被copy的对象,必须遵循NSCopying协议,实现copyWithNone:方法,copy对引用计数的影响取决于copyWithNone:方法的实现
//对系统类的copy
//-copy:拷贝了一个指针,指向该内存区域,并把引用计数+1(浅拷贝-拷贝指针)
//内存管理原则
//1.有加必有减,终极目标为0
//alloc,retain,copy的次数 和 release,autorelease的次数相同;保证内存使用结束后,及时的释放内存
//2.谁创建,谁管理,谁增加,谁释放
//当引用计数为0时,进入这个方法,系统收回内存
//初始化,先初始化父类,再初始化子类
//销毁时,先销毁子类,再销毁父类
//dealloc 要对用retain和copy修饰的属性进行释放
- (void)dealloc
{
NSLog(@"系统收回内存");
//1
[_name release];
_name = nil;
//2
// self.name = nil;
[_type release];
_type = nil;
[super dealloc];
}
- (void)setName:(NSString *)name
//判断新传入的值和之前一样不一样
//不一样的话,再赋值,来加快执行的效率,降低消耗
{
//1
// if (_name != name) {
//
// [name retain];//+1,拥有这个新值
// [_name release];//-1,释放旧的值
// _name = name;
// }
//2
if (_name != name) {
[_name release];
_name = [name retain];
}
}
posted on 2015-03-02 19:38 taiyang2014 阅读(172) 评论(0) 编辑 收藏 举报