A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沐小妖mavs 中级黑马   /  2015-12-6 21:25  /  1019 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内存管理基本使用
内存氛围堆区,栈区,常量区,静态区,代码区
堆区是系统不会自动回收的内存
栈区是系统会自动回收
为什么要内存管理:目的就是为了防止内存泄漏
内存泄漏:一个对象不再使用,但这个对象却没有被销毁,空间没有释放,则这个就叫做内存泄漏
内存管理的原则:不使用的对象必须销毁,释放内存(防止内存泄漏——)

内存管理的方式:
对象中有一个引用计数器在记录当前的引用.每增加一次引用,计数器加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];错误的     



3 个回复

倒序浏览
不错呦,路过赞一个
回复 使用道具 举报
感谢整理分享.内存管理这一块,会了其实不难,关键在于时刻要遵守内存管理的原则
回复 使用道具 举报
看样子是1111班的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马