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

dealloc:release中的属性是否设置为nil?或者干脆放开

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

    我是Objective-C(和stackoverflow)的新手,对有关属性的最佳实践有点不太了解。

    我的理解是,当您完全处理完一个属性后,您可以通过释放它们并立即设置为nil来避免bug,这样后续消息也会返回nil而不是异常。

    然而,当涉及到“copy”和“retain”属性的dealloc时,是否需要同时执行这两种操作?或者一个简单的

    [myProperty发布] 停下来?另外,我不需要在dealloc中释放'assign'属性,对吗?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  17
  •   Seamus Campbell    14 年前

    释放,但不要费心设置为零。通过@setter设置为零:

    self.myProperty = nil
    

    将释放旧值作为重新分配的一部分(尽管如注释中所述,可能会产生不必要的副作用),但只需将nil赋值给成员变量:

    myProperty = nil
    

    不会的。

    [myProperty release]
    

    这就是你所需要的。

        2
  •  0
  •   Objective Interested Person    14 年前

    @戴夫德龙和杰里米普:我想我们可以说,使用继承的消息(直接或间接由一个,调用来自超级部分),而建立一个对象(通过初始化,新的或复制)就像建立一个房子,并把屋顶上,而没有人确定,如果地下室准备就绪。这样做的同时,DeLoC可能相当于拆毁那座房子,从敲打基础墙开始,不确定是否在地下室里。

        3
  •  0
  •   Max Seelemann    14 年前

    @戴夫德龙:当一个对象的dealloc方法被执行时,这个对象就不再被使用了。所有的kvo观测者都应该在那一刻被移除,否则衰减将被丢弃。不管怎么说,即使观察者看到了变化,对象仍然存在(至少部分存在)。

    我认为重写的访问器是正确的参数。但是,对于您自己的类,使用访问器可能更简单。特别是在使用合成方法时,您知道语义,但不了解访问器的详细信息。。。