MRC記憶體管理的思考方式

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

MRC

記憶體管理的思考方式

1.自己生成的物件,自己持有

用alloc、new、copy、mutableCopy  意味著自己生成的物件,只有自己持有

程式碼舉例:

//自己生成並持有物件
id obj = [[NSObject alloc] init]; 
id obj = [NSObject new];

 

2.非自己生成的物件,自己也能持有

用上面的alloc、new、copy、mutableCopy以外 的方法取得的物件,不是自己生成並持有。所以自己不是該物件的持有者

程式碼舉例:

/**
取得非自己生成並持有的物件  
取得的物件存在,但自己不持有物件
*/
id obj = [NSMutableArray array];

使用 retain 方法可以持有物件

[obj retain]; //自己持有物件

通過retain方法,變成了自己所持有的物件了 

 

思考:[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];

注意:如果取得的物件存在,但自己不持有物件 時, 釋放的話,也是崩潰

 

 

IOS開發 最新文章