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


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