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的时候存在的特例有哪些?

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

  • 相关阅读:
    Webfunny Js错误分析讲解
    Webfunny漏斗分析功能讲解
    Webfunny自定义埋点功能讲解
    Webfunny连线用户功能讲解
    Webfunny用户细查功能讲解
    C语言打印数字前补0
    github上新晋star3K的开源AI模型,包含情感分析等
    IT系统架构的演化
    微服务架构与SOA架构的区别与联系
    开源的分布式事务-Seata的设计原理
  • 原文地址:https://www.cnblogs.com/LifeTechnologySupporter/p/5233351.html
Copyright © 2011-2022 走看看