您的位置:首页 > 其它

OC基础使用(三 内存管理)

2015-04-10 13:57 176 查看
内存管理

一、内存

4个部分:

常量区 (如:10,"abc") 效率最高

全局静态区 (如:定义的全局变量,静态变量)

栈区 (如:成员变量、参数)

堆区 (如:所有创建的OC对象)

堆、栈的区别?

栈区 空间小(5-10M)、先进后出

堆区 空间大(?G)、 无序的

管理方式:

1.基于垃圾回收的(系统完成)

2.基于引用计数的(手动完成)

OC的内存管理:

NSObject *obj1 = [[NSObject alloc] init];

NSObject *obj2 = obj1;

使用:obj1,obj2

[obj1 release];

[obj2 release];

前提:只有OC的对象才需要内存管理

定义:如果你使用alloc、copy、retain等关键字来得到对象的所有权,你就有义务

有责任,使用release、autorelease来释放该对象的所有权。

公式:alloc+retain+copy = release+autorelease;

原理:基于引用计数(retainCount)

一个对象被多少个对象引用,该对象的引用计数就应该是多少

属性的特性:与内存管理相关的

assgin 用于C语言的数据类型

copy 用于OC字符串

retain 用于OC对象

浅拷贝与深拷贝

浅拷贝:复制引用对象的指针(如:assgin、retain)

深拷贝:复制引用对象本身(如:copy)

注意:

1.iOS的内存管理是基于引用计数的,它不支持垃圾回收机制。

二、

NSObject *obj = [[NSObject alloc] init];

int num = 10;

指针(*):存储对象在内存中的首地址

三、OC的内存管理

前提:OC的对象才需要进行内存管理

引用计数(retainCount):对象被引用的个数

alloc:分配堆的内存、设置对象的引用计数为1

retain:+1

release:-1

dealloc:对象引用计数为0时

内存管理:

在代码块中:alloc + retain = release

注意:

1.OC的内存管理只用于管理堆区的内存

2.OC的内存管理是基于对象的引用计数的

错误:EXC_BAD_ACCESS

原因:执行的错误的内存地址,一个对象已经被销毁,不能在使用

解决:自己找
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: