iOS内存管理编程指南

http://blog.csdn.net/lifengzhong/article/details/7739496

基本数据类型是值类型的,存储在堆栈上,由编译器分配和回收,程序员只需要声明就可以立即使用。NSObject对象及其子类是引用类型的,存储在堆上,由程序员负责分配和回收。对象在用完后应立即释放;在有些情况下,对象分配和初始化后被传递到另一方法,此时,程序员对该对象不再具有控制权,可以调用对象的autorelease方法把对象丢到自动回收池,自动回收池对象效率较低。如果你对一个对象有所有权,那么你就要负责其回收的工作,否则,你不需要,也不能取回收你不拥有的对象。

1:所有使用alloc, new, copy或mutabelCopy,以及这些关键词开头的函数返回的对象,你都是拥有所有权的,也就是要负责这些对象的内存回收工作。这是iOS开发中的一种约定,所以,当你编写自己的alloc, new或copy类型的函数时,也请遵循这样的命名规范。

2:retain返回的对象,拥有所有权。例如显示调用retain函数返回的结果,或者synthesize 的retain类型的成员变量。 3:所有使用其他函数返回的对象,没有所有权。

4:返回的对象的引用,没有所有权。

5:autorelease返回的对象没有所有权。

在使用完方法内声明和分配的对象后,程序员无需做任何事以释放对象,CPU指令离开该方法后,方法内定义分配的对象自动释放。实例变量/属性则不同,在某方法内,如果我们已确定不再需要某实例变量/属性了,可以为对象设置nil值,以确保CPU指令离开该类型实例后,类实例变量/属性所占用的资源被正确释放。一般在viewDidUnload函数里设置实例变量/属性为nil。

原文地址:https://www.cnblogs.com/hjyxbfz/p/2978350.html