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

内存管理
一、内存
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 
原因:执行的错误的内存地址,一个对象已经被销毁,不能在使用
解决:自己找
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值