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];

注意:若是取得的对象存在,但本身不持有对象 时, 释放的话,也是崩溃

相关文章
相关标签/搜索