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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章