码迷,mamicode.com
首页 > 其他好文 > 详细

内存管理

时间:2015-12-21 16:19:32      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

1.内存管理:程序在运行中管理内存分配的过程,当需要就申请一片内存,不用就释放掉,站在对象分配所有权的角度来分配内存。

2.内存管理的两种方法

  MRR(Manual Retain Release)手动-------reference counting 引用计数机制

  ARC  (Automatic Reference counting)自动-------系统在程序编译阶段自动添加了释放对象的方法。

3.引用计数器:(我们无法查看结果,但是如果我们按照规范来书写,那么是没有问题的)

  When you create an object, it has a retain count of 1.

  When you send an object a retain message, its retain count is incremented by 1.

  When you send an object a release message, its retain count is decremented by 1.

  When you send an object a autorelease message, its retain count is decremented by 1 at the end of the current autorelease pool block.

  If an object’s retain count is reduced to zero, it is deallocated.

4.引起内存错误的两种情况

  释放掉一个正在使用的对象

  不用的对象没有释放掉导致内存错误

5.RULES

  • You own any object you create

    享有自己创建的对象的拥有权--new,alloc,copy 应该负责释放

  • You can take ownership of an object using retain

    对已经有的对象声明拥有权--strong,retain(通过setter方法和init方法)

  • When you no longer need it, you must relinquish ownership of an object you own

    当长时间没有使用必须释放掉拥有权--release,autorelease

  • You must not relinquish ownership of an object you do not own

    不能去释放一个没有拥有权的对象

6.autorelease与release的区别

  release是立刻释放

  autorelease是延迟释放(系统)

    NSString *string = [[[NSString alloc] initWithFormat:@"%@:%@",self.name, self.address] autorelease];

    企业习惯用 autorelease  因为操作方便出错概率小,一段时间内内存是增加的,牺牲了内存维护了代码的健壮性。

7.释放掉对象本身拥有的资源

    通过在类的实现文件里面重写父类的dealloc方法来实现释放一个对象本身拥有的资源

  -(void)dealloc

  {

    [_car release];   //先释放掉自己对象的拥有权

    [super dealloc];   //然后再调用[super dealloc]释放自己

  }

    dealloc方法是当这个对象的拥有者为0,那么系统会自动调用对象的dealloc方法,不能主动去调用 

8.retain cycle

  A对象拥有B对象,B对象拥有A对象

  当A要释放自己的时候,必须等B对象释放对自己的所有权

  当B要释放自己的时候,必须等A对象释放对自己的所有权

                   技术分享

  解决方法:大强引用小的,小弱引用大的

 

内存管理

标签:

原文地址:http://www.cnblogs.com/huoran1120/p/5063498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!