V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhangchioulin
V2EX  ›  C

[已解决] 我问一个有关 Objective-C 的内存管理方面的问题(不是错误,是有一个地方不理解),谢谢

  •  
  •   zhangchioulin · 2015-07-16 12:16:07 +08:00 · 762 次点击
    这是一个创建于 3450 天前的主题,其中的信息可能已经有所发展或是发生改变。

    具体的实现就不阐述了,主要是重写了 -(void) dealloc; 这个方法。有点疑问。

    代码:

    • (void)dealloc{
      [_name release]; // 为什么不回报错?
      // _name不是都已经被释放了?成为了僵尸对象了?
      // 僵尸对象不能访问,为什么下面的话照常运行?
      NSLog(@"%@ Book has been release", self.name);

      [super dealloc];
      }

    P.S. 模拟器已经设置允许僵尸对象了


    原因:如果在其类内部,可以通过成员变量名(地址)继续访问其成员属性,修改其值
    参考: http://www.cnblogs.com/dashunzi/p/3732912.html

    5 条回复    2015-07-16 15:23:11 +08:00
    zhangchioulin
        1
    zhangchioulin  
    OP
       2015-07-16 12:18:54 +08:00
    希望能帮到大家
    loveuqian
        2
    loveuqian  
       2015-07-16 12:30:12 +08:00 via iPhone
    这个方法是销毁前掉的还是销完后掉的?
    zhangchioulin
        3
    zhangchioulin  
    OP
       2015-07-16 12:56:54 +08:00
    @loveuqian 这个对象的retain count为0时会被调用。
    loveuqian
        4
    loveuqian  
       2015-07-16 14:14:12 +08:00 via iPhone
    @zhangchioulin 这个MRC应该只有面试时才会问吧
    zhangchioulin
        5
    zhangchioulin  
    OP
       2015-07-16 15:23:11 +08:00
    @loveuqian 真正的释放操作是在dealloc的[super dealloc]中完成的,最近在看这个,有疑问就问出来了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 20:33 · PVG 04:33 · LAX 12:33 · JFK 15:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.