黑马程序员技术交流社区
标题: 内存管理分享 [打印本页]
作者: 沐小妖mavs 时间: 2015-12-6 21:25
标题: 内存管理分享
内存管理基本使用
内存氛围堆区,栈区,常量区,静态区,代码区
堆区是系统不会自动回收的内存
栈区是系统会自动回收
为什么要内存管理:目的就是为了防止内存泄漏
内存泄漏:一个对象不再使用,但这个对象却没有被销毁,空间没有释放,则这个就叫做内存泄漏
内存管理的原则:不使用的对象必须销毁,释放内存(防止内存泄漏——)
内存管理的方式:
对象中有一个引用计数器在记录当前的引用.每增加一次引用,计数器加1,每减少一次引用计数器减1,当引用计数器的值是0时,这个对象会自动销毁,释放内存
目的:让对象的引用计数器统计是准确的。保证,当前这个对象没有被任何引用的时候,计数器的值为0
retain 计数器+1
release 计数器-1
retainCount :表示对象引用计数器的值
dealloc:对象被销毁时,必须执行这个方法。(系统会自动调用对象的这个方法)(所以要检测,在实现中重写dealloc方法让他打印一段文字,然后super dealloc就好
凡是一个类 alloc 或new 或copy 都会让计数器的值设置为1
谁引用,谁retain,各司其职 谁alloc或new 谁release 谁retain 谁release
多个对象指针如果指向同一个对象时,它们操作的计数器是同一个
注意:
1,一个对象被销毁后,不能再使用
2,一个对象引用了另一个对象,则必须在对象引入的时候retain,然后在对象自己被销毁的时候release
- Person*per=[[person allocinit];
- person*per2=per;
- [per2 retain];
per与per2 都是局部变量,它们在方法执行完后都会被销毁,则不会在引用对象,这个时候要让计数器减一
[per release];
[per2 release];这时候 retiancount计数器的值在减一,成了0,则对象自动销毁,系统调用delloc方法
一个对象被销毁,内存释放,则称之为僵尸对象
一个指针如果指向僵尸对象,我们就将这个指针叫做野指针(表示这个指针指向的数据不存在了)
- Person* per=[[person alloc init];
- [per release];此时,对象的计数器为0,被销毁
- [per releses];错误的
作者: cbl16888 时间: 2015-12-6 21:29
不错呦,路过赞一个
作者: Tmac90301 时间: 2015-12-6 22:28
感谢整理分享.内存管理这一块,会了其实不难,关键在于时刻要遵守内存管理的原则
作者: 马小平 时间: 2015-12-6 22:47
看样子是1111班的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |