关于属性:为什么不在Objective-C中使用self初始化方法?

Why not is it a good practice to use self in initializer method in Objective-C?

本问题已经有最佳答案,请猛点这里访问。

我知道如果任何其他对象正在观察属性的变化,那么在dealloc中使用setter会产生问题。 但为什么我们不应该在初始化器中使用它们?


我在初始化器中使用访问器时从未遇到任何问题。也许这取决于你在setter和getter中有多少魔法 - 如果访问者做了太聪明的事情,你可能会在初始化器中使用它们时遇到麻烦。

现在我想起来了,我甚至在dealloc中使用了访问器。再次,没有问题。如果有人正在观察一个物体,他应该确保该物体首先不会被释放。

所以,除非其他人提出一个引人注目的反驳论点,我想你可能会尝试在initdealloc中使用访问器,看看它对你有什么作用。


不在-init中使用访问器的唯一原因是因为您的对象未完全初始化且访问者可能依赖于它。如果您有一个覆盖访问器方法的子类,则可能会发生这种情况。

重新分配存在一个对称问题,因为重写的访问器可能依赖于不在部分解除分配的对象上调用。还有一个问题是您可能会发送虚假的KVO通知。

这是适当封装的核心。子类不应该关心超类的实现细节。