V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zhangchioulin
V2EX  ›  C

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

  •  
  •   zhangchioulin · Jul 16, 2015 · 1227 views
    This topic created in 3948 days ago, the information mentioned may be changed or developed.

    具体的实现就不阐述了,主要是重写了 -(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 replies    2015-07-16 15:23:11 +08:00
    zhangchioulin
        1
    zhangchioulin  
    OP
       Jul 16, 2015
    希望能帮到大家
    loveuqian
        2
    loveuqian  
       Jul 16, 2015 via iPhone
    这个方法是销毁前掉的还是销完后掉的?
    zhangchioulin
        3
    zhangchioulin  
    OP
       Jul 16, 2015
    @loveuqian 这个对象的retain count为0时会被调用。
    loveuqian
        4
    loveuqian  
       Jul 16, 2015 via iPhone
    @zhangchioulin 这个MRC应该只有面试时才会问吧
    zhangchioulin
        5
    zhangchioulin  
    OP
       Jul 16, 2015
    @loveuqian 真正的释放操作是在dealloc的[super dealloc]中完成的,最近在看这个,有疑问就问出来了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3424 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 12:11 · PVG 20:11 · LAX 05:11 · JFK 08:11
    ♥ Do have faith in what you're doing.