obeject-c ARC

首先我们先看下非ARC的欢迎下,我们要怎么做。

1.内存管理的思考方式


 自己生成的对象自己拥有

  *.alloc

*.new

*.copy

*.mutableCopy

  //自己生成并拥有对象
    id obj = [[NSObject alloc]init];

 
<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">非自己生成的对象,自己也能拥有</span>
<span style="font-family: Arial, Helvetica, sans-serif;">// 取得非自己生成的对象但自己不持有对象</span>
        id obj16 = [NSMutableArray array];</span>

// 取得非自己生成的对象但自己持有对象
        id obj16 = [NSMutableArray array];
//自己持有对象
[obj retain];


不再需要自己持有的对象时释放

//自己生成并拥有对象

id obj = [[NSObject alloc]init];

//释放对象

[obj release];

//一般会在release 之后,将对象指针赋为nil;以避免指针悬空的情况

obj = nil;


//取得非自己生成的对象但自己持有对象

id obj = [NSMutableArray array];

[obj retain];

[obj release];

obj = nil;


非自己持有的对象无法释放

//自己的生成并持有的对象
id obj = [[NSObject alloc]init];


//释放对象
[obj release];


//一般我们要再release后,将对象指针置为nil;以免指针悬空的情况
obj = nil;

//释放之后再次释放 非自己持有的对象
[obj release];


//取得非自己生成的对象且自己不持有对象
id obj = [NSMutableArray array];


//释放了非自己持有的对象,会导致程序崩溃
[obj release];



口诀:1.谁污染谁自理,不是自己生成的对象不用管也不用释放

   2.在存取方法中,要给对象retain,(后面要用的)

3.重写dealloc方法时,最后要调用[super dealloc]

4. 自己生成的对象作为函数返回值时,要把对象加到自动释放池(加autorelease)

ARC(automatic reference counting)情况下


1.强引用(拥有对象)(跳出作用域后失效回收,是不是自己生成的不重要只要是强引用就行了)

2.互相强引用易造成内存泄漏

3.对象被弱引用后,(报错,对象申请内存随既就被销毁)

4.__strong,__weak创建的变量,初始值为nil


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值