zhangchioulin
V2EX  ›  C

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

  •  
  •   zhangchioulin · Jul 16, 2015 · 1570 views
    This topic created in 4127 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
    zhangchioulin
    OP
    Jul 16, 2015
    1
    希望能帮到大家
    loveuqian
    loveuqian
    Jul 16, 2015 via iPhone
    2
    这个方法是销毁前掉的还是销完后掉的?
    zhangchioulin
    zhangchioulin
    OP
    Jul 16, 2015
    3
    @loveuqian 这个对象的retain count为0时会被调用。
    loveuqian
    loveuqian
    Jul 16, 2015 via iPhone
    4
    @zhangchioulin 这个MRC应该只有面试时才会问吧
    zhangchioulin
    zhangchioulin
    OP
    Jul 16, 2015
    5
    @loveuqian 真正的释放操作是在dealloc的[super dealloc]中完成的,最近在看这个,有疑问就问出来了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1430 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    ♥ Do have faith in what you're doing.