zoukankan      html  css  js  c++  java
  • iOS----MRC(手动内存管理)

    1.MRC是什么,有什么用?

    在苹果开发中,我们是没有垃圾回收机制的。所以在ARC推出之前,我们苹果开发程序员需要通过手动代码的形式尽量严密的管理我们的App的内存;

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    2.如何运用MRC管理内存?

          1)实际关键字:

    无论是ARC还是MRC管理内存都涉及到几个关键字符:

          使用alloc、new、copy创建一个对象,该对象的retain count 都等于1,需要用release来释放该对象。谁创建,谁去释放。在这3钟方法以外的方法创建的对象,都被系统默认的声明为autorelease。

          ClassA  *a = [[ClassA   alloc]  init];

          ClassA  *b = a;

          [b   retain];

          //do smoething

          [b release];

          b  =  nil;

    把 一个指针赋值给另外一个指针的时候,a 指针所指向的对象的引用次数并没有增加,也就是说,对象的retain count依然等于1。只有在retain了之后,retain count 才会加1。那么,如果这时候执行[a  release],只是a指针放弃了对对象的访问权,对象的retain count 减1,对象没有被销毁。只有当b也执行了release方法之后,才会将对象销毁掉。因此,谁retain了,谁就要release。

          在对象被销毁之后,指针依然是存在的。所以在release了之后,最好把指针赋为空,防止无头指针的出现。顺便一说,release一个空指针是合法的,但是不会发生任何事情。

          如果你在一个函数中创建并返回一个对象,那么你需要把这个对象声明为autorelease

          (ClassA  *)Function()

          {

               ClassA *a = [[[ClassA   alloc]  init]  autorelease];

               return a;

          }

    不这样做的话,会造成内存泄露。

     --------------------------------------------------------------------------------------------------------------------------------------------------------------

    3.MRC的原理是什么?

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    4.使用MRC应该注意些什么?

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    5.使用MRC的时候存在的特例有哪些?

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    C# Socket TcpClient 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
    C#编程使用Managed Wifi API连接无线SSID
    中国最精确的电子地图,可以找到你家哦
    利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error
    Google Directions API 中路线编码解析
    c语言 nmealib-0.5.3 学习 简单代码 ,供参考
    【转】IT管理人才必备的十大能力
    【转】10个让人受益的管理原理
    【转】耐心看
    【转】对于移动APP测试的一个小技巧
  • 原文地址:https://www.cnblogs.com/LifeTechnologySupporter/p/5233351.html
Copyright © 2011-2022 走看看