zoukankan      html  css  js  c++  java
  • OC_自动引用计数器_0x03

    release方法的实现

    - (void)release

    {

      if(NSDecrementExtraRefCountWasZero(self))

        [self dealloc];

    }

    BOOL

    NSDecrementExtraRefCountWasZero(id anObject)

    {

      if(((struct obj_layout *)anObject[-1].retained == 0)

      {

        return YES;

      }

      else 

      {

        ((struct obj_layout *)anObject)[-1].retained--;  

        return NO;

      }

    }

    同预想的一样,当retained变量大于0时减1,等于0时调用dealloc实例方法,废弃对象。

    废弃对象时所调用的dealloc实例方法的实现。

    - (void)dealloc

    {

      NSDeallocObject(self);

    }

    inline void

    NSDeallocObject(id anObject)

    {

      struct obj_layout *o = &((struct obj_layout *)anObject)[-1];

      free(o);

    }

    1)在Objective-C的对象中存有引用计数这整数值,

    2)调用alloc或是retain方法后,引用计数值加1,

    3)调用release后,引用计数值减1,

    4)引用计数值为0时,调用dealloc方法废弃对象。

  • 相关阅读:
    groovy 执行shell
    expect 用法
    shebang解释
    docker 安装
    centos7 lvm添加硬盘后扩展磁盘空间
    scoped的原理和deep深度选择器的妙用
    swagger3
    帮评网
    反射工具
    网络只能传输二进制
  • 原文地址:https://www.cnblogs.com/fkunlam/p/4903714.html
Copyright © 2011-2022 走看看