代码之家  ›  专栏  ›  技术社区  ›  Madhup Singh Yadav

我们为什么要释放?

  •  6
  • Madhup Singh Yadav  · 技术社区  · 16 年前

    我经常看到,当我们释放ab对象时,我们会立即将其设置为零。我知道release和nil都释放了与对象关联的旧值,但在release的情况下,它将对象作为悬空指针保留,因此我们必须将其设置为nil。

    所以我的问题是,如果nil释放对象的旧值,并将对象设置为nil,为什么我们不应该只使用nil,为什么w也应该使用release。

    方式1:

    MyClass *obj = [[MyClass alloc] init];
    [obj release];
    obj = nil;
    

    方式2:

    MyClass *obj = [[MyClass alloc] init];
    obj = nil;
    

    如果使用way1,way1和way2的真正区别是什么?为什么不只使用way2?

    2 回复  |  直到 13 年前
        1
  •  11
  •   BJ Homer    13 年前

    将指针设置为nil不会释放该指针前一个目标所占用的内存。在简单的英语中,将其指定为nil不起作用 放开它。

    若您的应用程序是垃圾收集的,那个么发布是不可操作的,可以忽略不计。否则,这是非常非常必要的。因此,方法1总是正确的,而方法2只有在垃圾收集下才是正确的。

    :此答案不适用于使用自动引用计数的项目。在ARC下,将指针设置为零 向对象发送释放。

        2
  •  1
  •   Bryan McLemore    16 年前

    正如BJ所说,将其设置为nil不会释放内存,并且在非gc收集的环境中会导致内存泄漏。另一种可能也是有效的选择是

    MyClass *obj = [[[MyClass alloc] init] autorelease];  
    
    obj = nil;