首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >removeObjectForKey:不调用dealloc

removeObjectForKey:不调用dealloc
EN

Stack Overflow用户
提问于 2011-04-13 19:39:32
回答 1查看 1.4K关注 0票数 1

我的印象是,使用removeObjectForKey:@"someKey“从NSMutableDictionary中删除对象会释放被删除的对象。然而,当我这样做的时候,我的对象的dealloc方法并没有被调用。我必须显式地释放它们吗?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-13 21:14:03

removeObjectForKey将调用release --当然,假设您的@"someKey"确实与字典中的一个对象相匹配。但是,调用release并不能保证对象随后会获得dealloc-ed。这取决于它上面有什么其他所有权声明。

由于在这种情况下没有发送dealloc消息,因此我们可以得出结论,其他消息具有持续的声明。这可能是错误的结果,也可能不是错误的结果--例如,如果您还将对象传递给了某个系统组件,那么它可能会合理地希望您的对象比您保留的时间更长。

如果不是这样,最有可能的原因是做了以下这些事情:

代码语言:javascript
复制
[dictionary setObject:[[SomeClass alloc] init] forKey:@"someKey"];

也就是说,永远不要放弃alloc授予的初始所有权。相反,这应该像这样做:

代码语言:javascript
复制
[dictionary setObject:[[[SomeClass alloc] init] autorelease] forKey:@"someKey];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5648548

复制
相关文章

相似问题

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