关于内存管理思考方式的一些学习总结
谈到内存管理首先想到的是“引用计数”这个名称,但真正正确客观的去思考这个问题,应该先理解以下几点:
- 自己生成的对象,自己所持有
- 非自己生成的对象,自己也能持有
- 不再需要自己持有的对象时释放
- 非自己持有的对象无法释放
下面我们看一下对象操作对应的表格
| 对象方法 | OC方法 |
|---|---|
| 生成并持有的对象 | alloc/new/copy/mutableCopy等方法 |
| 持有的对象 | retain方法 |
| 释放对象 | release方法 |
| 废弃对象 | dealloc方法 |
接下来看一下具体的各个项目
自己生成的对象,自己持有
使用以下方法名开头意味着自己生成的对象自己持有:
- alloc
- new
- copy
mutableCopy
下面来举一个例子
/* *自己生成并持有对象 */ id obj=[[NSObject alloc]init];
非自己生成的对象,自己也可以持有
用上述方法以外的方法取得对象,因为非自己生成并持有,所以自己不是该对象的持有者。我们经常遇到的+(id)array方法便是
/*
*取得非自己生成并持有的对象
*/
id array=[NSMutableArray array];
/*
*取得的对象存在,但自己不持有对象
*/
[array retain];
/*
*自己持有对象
*/
不再需要自己持有的对象时释放
自己持有的对象,一旦不在需要,持有者有义务释放该对象,释放通过release方法。
/*
*取得非自己生成并持有的对象
*/
id array=[NSMutableArray array];
/*
*取得的对象存在,但自己不持有对象
*/
[array retain];
/*
*自己持有对象
*/
[array release];
/*
*释放对象
*对象不可再被访问
*/
无法释放非自己持有的对象
这个就好理解了,对于通过alloc/new/copy/mutableCopy方法生成的对象,或是retain持有的对象,在不需要时就需要将其释放。而由此以外所得的对象绝不能释放。倘若在应用程序中释放了非自己所持有的对象就会造成崩溃。
以上内存管理的思考方式是我在看书以及实践中所得,有不全面和不细致的地方,希望可以对看到的有所帮助。
本文总结了内存管理的基本原则,包括对象的生成与持有、对象持有与释放等关键概念,并通过实例说明了如何正确地进行内存管理。

被折叠的 条评论
为什么被折叠?



