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];
注意:若是取得的对象存在,但本身不持有对象 时, 释放的话,也是崩溃