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

发布与否-最佳实践

  •  7
  • Abhinav  · 技术社区  · 14 年前

    当我们将内存分配给一个类变量时,应该释放它还是在dealloc方法中将其设置为nil?什么是最佳实践?

    1 回复  |  直到 14 年前
        1
  •  11
  •   Community CDub    7 年前

    最佳实践:

    [foo release]; // ensures that memory is released
    foo = nil; // ensures that there is no dangling pointer to released memory
    

    其他说明:

    当您分配给一个声明保留的财产时,

    // in your .h
    @property (retain) MyObject *foo;
    
    // in your .m
    self.foo = bar; // bar is retained; whatever foo previously pointed at is released
    

    它将释放以前指向的对象,并保留指定的新对象。

    因此,您可以使用:

    self.foo = nil;
    

    它会释放foo所指的任何东西。 然而, 如果您的属性没有声明为具有retain存储语义,则这不会隐式释放foo所指向的任何内容。另外,正如Ryan所指出的,一个属性可以被覆盖以产生副作用。因此,最好遵循始终使用的模式:

    [foo release];
    

    为了确保没有指向已释放内存的悬挂指针,可以按照以下步骤进行操作:

    foo = nil;
    

    如果不使用带有retain语义的属性,则 需要 要释放变量中存储的内容:

    [foo发布];
    

    编辑: 另一个问题的答案如下:

    iPhone - dealloc - Release vs. nil