具体地说,我说的是像这样写一个dealloc:
-(void)dealloc
{
self.myvar = nil;
[super dealloc];
}我知道这违背了苹果的建议。我也知道,在部分释放的对象上使用setter也会导致KVO发出。但是如果我按照这个顺序进行调用(例如:先是setter,然后是超级dealloc),这样做会有风险吗?我试图确切地了解危险是什么,特别是为什么这是一件坏事(Tm)。谢谢……
发布于 2010-10-07 05:59:39
除了上述原因(这可能意味着UB或灾难),您可能最终会导致对象重新构建自身,以及不自然的依赖循环(例如,在覆盖访问器的子类之间)-子类可能已经建立了自己的依赖关系,尽管子类的ivars (实际上)是无法到达的,并且不应该为超类所知。它会严重限制子类对象的可用性,并破坏它们的实现(因为它们的实现可能会遭到黑客攻击,或者可能会经历某种形式的复活)。这些都是您想要避免的东西,并且应该避免在初始化…中使用访问器出于类似的原因。它在大型系统中变得丑陋,很难维护-而这个问题很容易避免。
发布于 2010-10-07 05:43:10
一般来说,setter可能需要/访问另一个实例变量,如果您已经处理了它,这可能会导致Bad Mojo。您不想使用[myvar release]有什么特别的原因吗
https://stackoverflow.com/questions/3877071
复制相似问题