为什么不在Objective-C中使用self初始化方法?

Kri*_*nan 5 properties objective-c

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

zou*_*oul 8

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

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

因此,除非其他人提出一个引人注目的反驳论点,否则我认为您可能会尝试使用访问器init,dealloc并查看它是如何工作的.


Jer*_*myP 6

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

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

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