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];