1. 自动引用计数
自动引用计数的含义:内存管理中对引用采取自动计数(ARC),让编译器来进行内存管理,无需再次键入retain或者release代码,降低崩溃,内存泄漏等风险,减少开发工作量。
2. 内存管理
对一个对象进行alloc/new/copy/mutableCopy等操作,会生成并持有当前对象的引用计数,retain会导致count+1;
Cocoa框架、Foundation框架和NSObject类的关系
内存管理的思考:1. 自己生成的对象,自己所持有; 2. 非自己生成的对象,自己也能持有; 3. 自己所持有的对象不再需要的时候释放; 4. 非自己持有的对象无法释放;
3.所有权修饰符
__strong :修饰符是id类型和对象类型默认的所有权。
eg:id obj = [[NSObject alloc] init];
id 和 对象类型在没有明确指定所有权修饰符时, 默认为__strong修饰符,上面代码与下相同
id __strong obj = [[NSObject alloc] init];
能完美的满足“引用计数式内存管理的思考方式”。
__weak修饰符:弱引用不能持有对象实例
id __weak obj = [[NSObject alloc] init];
在变量obj上附加了__weak修饰符,变量obj持有对象的弱引用。因此,生成的对象会立即释放。
__strong修饰符是不能解决有些重大问题的。例如:循坏引用
__unsafe_unretained修饰符:是不安全的所有权修饰符,自己生成的并持有的对象不能继续为自己持有,会立即被释放。