removeObjectForKey
будет вызывать release
- при условии, конечно, что ваш @"someKey"
действительно соответствует объекту в словаре.Однако вызов release
не гарантирует, что объект получит dealloc
-ed.Это зависит от того, какие другие претензии на собственность существуют на нем.
Так как в этом случае сообщение dealloc
не отправляется, мы можем заключить, что что-то еще имеет постоянное требование.Это может быть, а может и не быть результатом ошибки - например, если вы также передали объект в какой-либо системный компонент, он вполне может на законных основаниях хотеть хранить ваш объект дольше, чем вы.
Еслиэто не так, наиболее вероятной причиной было бы сделать что-то вроде этого:
[dictionary setObject:[[SomeClass alloc] init] forKey:@"someKey"];
То есть, никогда не отказываться от первоначального права собственности, предоставленного alloc
.Вместо этого это должно быть сделано что-то вроде:
[dictionary setObject:[[[SomeClass alloc] init] autorelease] forKey:@"someKey];