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