iOS内存管理

来源:互联网 发布:mac自带音频剪辑软件 编辑:程序博客网 时间:2024/06/08 17:02

每个对象都有一个引用计数器(4字节)

1.引用计数为0的时候对象就会被销毁(内存被回收),不为0就不会被销毁,除非程序退出

2.对象刚创建的时候引用计数为1


引用计数器的数值怎么计算

1.创建对象时候默认就是1(alloc, new, copy)

2.给对象发送一条retain消息 加1

3.给对象发送一条release消息 减1

4.给对象发送一条retainCount消息 获取计数器的数值


对象销毁

销毁的前提:引用计数器为0

销毁时做的事情:调用dealloc方法

(一定要调用[super dealloc])


当对象不存在时不可以再relese 和retain

指向不可以内存的指针:野指针错误


非ARC环境下 [super dealloc]必须写


多个对象使用同一个对象,这个对象的引用计数是由这多个对象来控制的,谁使用谁加一,谁不使用谁减一


setDog中

_dog = [dog retain];


内存管理就是确保开辟的堆空间被正确的释放


黄金法则

1.凡是用alloc, retain, new (或使用new开头的方法),copy(或使用copy开头的方法),NSMutableCopy (或使用NSMutableCopy开头的方法)创建的对象都必须使用release或autorelease方法释放。

2.谁创建谁释放(哪个类创建,哪个类释放,谁写alloc,谁写release)


if(_crayFish != crayFish){

[_crayFish release];                =          @property (retain) CrayFisn *crayFish

}

_crayFish = [crayFish retain];


非ARC环境下 dealloc要自己手动释放


retain 对象,assign非对象


@property(nonatomic,retain) NSString *str;


浅拷贝:拷贝指针

深拷贝:对象拷贝

retain只是计数器加一,还是同一个对象

copy拷贝的对象不可以被修改

NSMutablecopy拷贝的对象可以背修改




MRC对象的释放看当前对象的引用计数


ARC对象的释放看当前对象有被强引用


__weak弱指针 虽然引用 但是不指向  销毁对象时不考虑弱指针

相互调用时必须有一个是弱引用

0 0