NSMutableDictionary памяти / адрес, выпуск не работает? - PullRequest
1 голос
/ 10 июня 2010

Я пытаюсь создать NSMutableDictionary (dictA) с objectA.Когда я пытаюсь просмотреть свой словарь (NSLog), каждый ключ указывает на один и тот же адрес.У меня есть objectA_1, который имеет тип objectA и используется для настройки словаря.Кроме того, если я пытаюсь получить getObject, я всегда получаю последний ключ / значение, которое было добавлено в словарь.Я попробовал setValue и получил те же результаты.Что-то не так с моим объектом?Метод релиза не работает должным образом?Я сохраняю, когда я не должен?Спасибо.

dictA = [[NSMutableDictionary alloc] init];
objectA *objectA = [[objectA alloc] init];

objectA.ID = 5;
[dictA setObject:objectA forKey:@"apple"];
[objectA release];

objectA.ID = 50;
[dictA setObject:objectA forKey:@"japan"];
[objectA release];

objectA.ID = 6;
[dictA setObject:objectA forKey:@"paris"];
[objectA release];

objectA.ID = 11;
[dictA setObject:objectA forKey:@"pizza"];
[objectA release];

// NSlog:

apple = "objectA: 0x175830";
japan = "objectA: 0x175830";
paris = "objectA: 0x175830";
pizza = "objectA: 0x175830";

1 Ответ

1 голос
/ 10 июня 2010

Я предполагаю, что вы имели в виду:

objectA *objectA_1 = [[objectA alloc] init];

Вы должны отпускать объект только один раз.Это связано с тем, что каждый раз, когда словарь удаляет элемент, он автоматически вызывает функцию release для объекта, поскольку он автоматически сохраняет объект каждый раз, когда вы добавляете его в словарь.

Вместо этого попробуйте этот код:

dictA = [[NSMutableDictionary alloc] init];
objectA *objectA_1 = [[objectA alloc] init];

[dictA setObject:objectA_1 forKey:@"apple"];
[dictA setObject:objectA_1 forKey:@"japan"];
[dictA setObject:objectA_1 forKey:@"paris"];
[dictA setObject:objectA_1 forKey:@"pizza"];
[objectA_1 release];

Кроме того, вам необходимо реализовать метод description вашего пользовательского объекта, чтобы NSLog знал, как его распечатать.

...