代码之家  ›  专栏  ›  技术社区  ›  Dilshan

生成类nil并释放引用

  •  0
  • Dilshan  · 技术社区  · 14 年前

    在我的密码里我知道,

    ClassA *reference = [[ClassA alloc] init];
    [reference invokeMethod];
    reference = nil;
    [reference release];
    

    如果没有reference=nil,我知道它会释放内存,因为这是正常的方式。但在这种情况下,如果我们将引用设为nil并稍后释放内存,那么它是否会删除用于创建对象的早期内存?

    谢谢您

    2 回复  |  直到 14 年前
        1
  •  2
  •   kennytm    14 年前

    不。 release = nil 只是让它原来指向的内存不可访问;它不会删除已消耗的内存。(同时,这也导致 [reference release]; 之后的声明是禁止的。)

        2
  •  1
  •   Gopalakrishnan Mallappan    14 年前

    正如kenny所说,Release=nil只会使引用对象指向nil。现在您已经失去了对ClassA分配对象的控制,并且无法释放它,因此会发生内存泄漏。而[reference release]试图释放nil对象的内存,这样也会导致崩溃。