dealloc中的属性:release然后设置为nil?或者简单地发布

ave*_*dev 7 objective-c

我是Objective-C(和stackoverflow)的新手,我有点关于属性的最佳实践.

我的理解是,当你完全使用属性时,可以通过释放它们来避免错误,然后立即设置为nil,以便后续消息也返回nil而不是异常.

[myProperty release],myProperty = nil;

但是,当涉及到"复制"和"保留"属性的dealloc时,是否需要同时执行这两个操作?或做一个简单的

[myProperty发布]剪了吗?另外,我是否正确,我不需要在dealloc中释放'assign'属性?

谢谢!

Sea*_*ell 17

释放,但不要打扰设置为零.通过@synthesized setter设置为nil:

self.myProperty = nil
Run Code Online (Sandbox Code Playgroud)

将作为重新分配的一部分释放您的旧值(尽管如评论中所述,可能有不必要的副作用),但只是将nil分配给您的成员变量:

myProperty = nil
Run Code Online (Sandbox Code Playgroud)

将不会.

[myProperty release]
Run Code Online (Sandbox Code Playgroud)

是你所需要的全部.

(而且你对"分配"属性是正确的.)

  • 正如Dave所说,目前推荐(Apple)的做法是不使用访问器在dealloc中分配nil(因此释放).它不仅可以触发KVO方法,而且set子访问器可能已被子类覆盖. (4认同)
  • +1释放是你所需要的,但我要小心不要在`dealloc`中使用`self.myProperty = nil`(它可以触发KVO方法并通知观察者尝试访问部分解除分配的对象......) (3认同)