首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在取消分配中使用setters /setters

在取消分配中使用setters /setters
EN

Stack Overflow用户
提问于 2010-10-07 05:32:56
回答 2查看 208关注 0票数 1

具体地说,我说的是像这样写一个dealloc:

代码语言:javascript
复制
-(void)dealloc 
{
    self.myvar = nil;
    [super dealloc];
}

我知道这违背了苹果的建议。我也知道,在部分释放的对象上使用setter也会导致KVO发出。但是如果我按照这个顺序进行调用(例如:先是setter,然后是超级dealloc),这样做会有风险吗?我试图确切地了解危险是什么,特别是为什么这是一件坏事(Tm)。谢谢……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-07 05:59:39

除了上述原因(这可能意味着UB或灾难),您可能最终会导致对象重新构建自身,以及不自然的依赖循环(例如,在覆盖访问器的子类之间)-子类可能已经建立了自己的依赖关系,尽管子类的ivars (实际上)是无法到达的,并且不应该为超类所知。它会严重限制子类对象的可用性,并破坏它们的实现(因为它们的实现可能会遭到黑客攻击,或者可能会经历某种形式的复活)。这些都是您想要避免的东西,并且应该避免在初始化…中使用访问器出于类似的原因。它在大型系统中变得丑陋,很难维护-而这个问题很容易避免。

票数 2
EN

Stack Overflow用户

发布于 2010-10-07 05:43:10

一般来说,setter可能需要/访问另一个实例变量,如果您已经处理了它,这可能会导致Bad Mojo。您不想使用[myvar release]有什么特别的原因吗

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3877071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档