微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

removeObjectForKey:不调用dealloc

如何解决removeObjectForKey:不调用dealloc

| 我的印象是,使用removeObjectForKey:@ \“ someKey \”从NSMutableDictionary中删除对象释放了要删除的对象。但是,执行此操作时不会调用我对象的dealloc方法。我是否必须明确释放它们?谢谢你的帮助。     

解决方法

removeObjectForKey
将称为
release
-当然,假设您的
@\"someKey\"
实际上与字典中的对象匹配。但是,调用
release
并不能保证对象将得到
dealloc
-ed。这取决于其他所有权主张。 由于在这种情况下没有发送“ 4”消息,因此我们可以得出结论,其他消息仍在继续。这可能是错误的结果,也可能不是错误的结果;例如,如果您还将该对象传递给了某个系统组件,则可能很合理地希望将对象的保留时间比您保留的时间更长。 如果不是这种情况,则最可能的原因是按照以下方式进行了一些操作:
[dictionary setObject:[[SomeClass alloc] init] forKey:@\"someKey\"];
也就是说,不要放弃“ 7”所赋予的最初所有权。相反,应该这样做:
[dictionary setObject:[[[SomeClass alloc] init] autorelease] forKey:@\"someKey];
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。