Objective c NSMutableDictionary内存/地址,版本不起作用?

Objective c NSMutableDictionary内存/地址,版本不起作用?,objective-c,memory-management,nsmutabledictionary,Objective C,Memory Management,Nsmutabledictionary,我正在尝试使用objectA创建NSMutableDictionary(dictA)。当我试图查看我的字典(NSLog)时,每个键都指向相同的地址。我有一个objectA_1,它是objectA类型,用于设置字典。此外,如果我尝试获取对象,我总是获取添加到字典中的最后一个键/值。我尝试了setValue,得到了同样的结果。我的反对意见有什么问题吗?释放方法是否工作不正常?当我不应该的时候,我会保留吗?多谢各位 dictA = [[NSMutableDictionary alloc] init];

我正在尝试使用objectA创建NSMutableDictionary(dictA)。当我试图查看我的字典(NSLog)时,每个键都指向相同的地址。我有一个objectA_1,它是objectA类型,用于设置字典。此外,如果我尝试获取对象,我总是获取添加到字典中的最后一个键/值。我尝试了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";

我想你的意思是:

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

此外,您还需要实现自定义对象的方法,以便NSLog知道如何打印它。

我假设您的意思是:

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

此外,您需要实现自定义对象的方法,以便NSLog知道如何打印它。

您是否为objectA实现了
description
方法?您是否为objectA实现了
description
方法?