removeObjectForKey: не вызывает dealloc - PullRequest
1 голос
/ 13 апреля 2011

У меня сложилось впечатление, что удаление объекта из NSMutableDictionary с помощью removeObjectForKey: @ "someKey" освободило удаляемый объект.Тем не менее, метод dealloc моих объектов не вызывается, когда я делаю это.Должен ли я их явно освобождать?Спасибо за любую помощь.

1 Ответ

3 голосов
/ 13 апреля 2011

removeObjectForKey будет вызывать release - при условии, конечно, что ваш @"someKey" действительно соответствует объекту в словаре.Однако вызов release не гарантирует, что объект получит dealloc -ed.Это зависит от того, какие другие претензии на собственность существуют на нем.

Так как в этом случае сообщение dealloc не отправляется, мы можем заключить, что что-то еще имеет постоянное требование.Это может быть, а может и не быть результатом ошибки - например, если вы также передали объект в какой-либо системный компонент, он вполне может на законных основаниях хотеть хранить ваш объект дольше, чем вы.

Еслиэто не так, наиболее вероятной причиной было бы сделать что-то вроде этого:

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

То есть, никогда не отказываться от первоначального права собственности, предоставленного alloc.Вместо этого это должно быть сделано что-то вроде:

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