我的印象是,使用removeObjectForKey:@"someKey“从NSMutableDictionary中删除对象会释放被删除的对象。然而,当我这样做的时候,我的对象的dealloc方法并没有被调用。我必须显式地释放它们吗?谢谢你的帮助。
发布于 2011-04-13 21:14:03
removeObjectForKey将调用release --当然,假设您的@"someKey"确实与字典中的一个对象相匹配。但是,调用release并不能保证对象随后会获得dealloc-ed。这取决于它上面有什么其他所有权声明。
由于在这种情况下没有发送dealloc消息,因此我们可以得出结论,其他消息具有持续的声明。这可能是错误的结果,也可能不是错误的结果--例如,如果您还将对象传递给了某个系统组件,那么它可能会合理地希望您的对象比您保留的时间更长。
如果不是这样,最有可能的原因是做了以下这些事情:
[dictionary setObject:[[SomeClass alloc] init] forKey:@"someKey"];也就是说,永远不要放弃alloc授予的初始所有权。相反,这应该像这样做:
[dictionary setObject:[[[SomeClass alloc] init] autorelease] forKey:@"someKey];https://stackoverflow.com/questions/5648548
复制相似问题