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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /**
  2.     学习课程:内存管理相关内容:arc&mrc
  3.     1、内存管理的对象:对象。基本数据结构不需要内存管理,局部变量在一段代码段结束后会自动清空内存。而对象通过动态分配存储在堆中,即使指向它的指针已经消亡,它仍然存在,造成内存泄露。
  4.     2、在重写dealloc过程中,先释放当前对象的相关资源,最后通过[super dealloc]调用父类的函数去释放父类中相关的资源。遵循设计中自己只做自己的事的原则。
  5. */
  6. #import "Person.h"
  7. #import <Foundation/Foundation.h>

  8. int main(int argc, const char * argv[]) {
  9.     @autoreleasepool {
  10.         // insert code here...
  11.         //先生成一个Person类,并初始化
  12.         Person *per = [[Person alloc]init];
  13.         NSLog(@"per此时的引用计数为%ld",per.retainCount);
  14.         //通过调用release方法让retainCount减一。调用完毕后系统检测到retainCount已经为0了,自动调用dealloc函数
  15.         [per release];
  16.         //此时per对象已经被回收了,(称为僵尸对象),若继续使用,会报野指针错误
  17.         //[per setAge:15];
  18.         //per=nil;//这句话将指针指向空,之后即使执行了类似[per setAge:15];的语句,也不会报错,从而让程序正常执行下去。
  19.         //但是,如果在per release前误将per=nil。会导致内存泄露,因为此时已经丢失了该对象的地址,失去了操作权,即使调用release也没有效果了。
  20.       //  NSLog(@"Hello, World!");
  21.     }
  22.     return 0;
  23. }
复制代码
  1. #import "Person.h"

  2. @implementation Person
  3. //重写继承的dealloc方法
  4. -(void)dealloc
  5. {
  6.     NSLog(@"dealloc被调用,开始回收对象");
  7.     //先释放子类的资源
  8.     //再调用父类的dealloc释放父类的资源。遵循原则,自己处理自己的事情
  9.     [super dealloc];
  10. }
  11. @end
复制代码


评分

参与人数 1技术分 +1 收起 理由
酱油 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
zhang洁 来自手机 中级黑马 2016-1-21 12:17:30
沙发
谢谢总结,谢谢
回复 使用道具 举报
概念是有了,所以一般般吧。
内存管理:new、alloc、copy、retain,就必须要autorelease、release(针对一个对象)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马