1

我正在尝试使用 objectA 创建一个 NSMutableDictionary(dictA)。当我尝试查看我的字典(NSLog)时,每个键都指向同一个地址。我有一个 objectA_1,它是 objectA 类型,用于设置字典。此外,如果我尝试获取对象,我总是会得到添加到字典中的最后一个键/值。我尝试了 setValue 并得到了相同的结果。我的 objectA 有问题吗?释放方法是否无法正常工作?当我不应该保留时,我会保留吗?谢谢你。

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

//NS日志:

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

1 回答 1

1

我假设你的意思是:

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

您应该只释放一次对象。这是因为每次字典删除元素时,它都会自动调用对象的释放,因为每次将对象添加到字典时它都会自动保留该对象。

试试这个代码:

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 知道如何打印它。

于 2010-06-10T03:39:39.230 回答