MRC內存管理的思考方式

MRC

內存管理的思考方式

1.本身生成的對象,本身持有spa

用alloc、new、copy、mutableCopy  意味着本身生成的對象,只有本身持有code

代碼舉例:對象

//本身生成並持有對象
id obj = [[NSObject alloc] init]; 

id obj = [NSObject new];

 

2.非本身生成的對象,本身也能持有內存

用上面的alloc、new、copy、mutableCopy之外 的方法取得的對象,不是本身生成並持有。因此本身不是該對象的持有者it

代碼舉例:內存管理

/**
   取得非本身生成並持有的對象  
   取得的對象存在,但本身不持有對象
*/
id obj = [NSMutableArray array];

使用 retain 方法能夠持有對象table

[obj retain]; //本身持有對象class

經過retain方法,變成了本身所持有的對象了 object

 

思考:[NSMutableArray array] 方法   能夠取得的對象存在,但本身不持有對象,是怎麼作到的?程序

- (id)object{
     
     //本身持有對象
     id obj = [[NSObject alloc] init];

     //取得的對象存在, 但本身不持有對象
     [obj autorelease];

     return obj;
}

autorelease方法,能夠使 取得的對象存在, 但本身不持有對象

 

3.再也不須要  本身持有的對象時 ,釋放對象

用release方法

代碼舉例:

id obj = [[NSObject alloc] init];

//釋放對象
[obj release];

 

4.沒法釋放 非本身持有的對象

若是這麼作 程序會奔潰

代碼舉例:

id obj = [[NSObject alloc] init];

//對象釋放
[obj release];


//釋放以後再次釋放 已經非本身持有的對象,程序會崩潰
[obj release];

注意:若是取得的對象存在,但本身不持有對象 時, 釋放的話,也是崩潰

相關文章
相關標籤/搜索