removeObjectForKey:不调用dealloc

时间:2011-04-13 11:39:32

标签: objective-c object release nsmutabledictionary

我的印象是使用removeObjectForKey从@ NSMutableDictionary中删除对象:@“someKey”释放了要删除的对象。但是,当我这样做时,我的对象的dealloc方法没有被调用。我必须明确释放它们吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

removeObjectForKey 调用release - 当然,假设您的@"someKey"确实匹配字典中的对象。但是,调用release并不能保证该对象将获得dealloc - ed。这取决于其他所有权声称的内容。

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

如果情况并非如此,最可能的原因是在这些方面做了一些事情:

[dictionary setObject:[[SomeClass alloc] init] forKey:@"someKey"];

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

[dictionary setObject:[[[SomeClass alloc] init] autorelease] forKey:@"someKey];