【问题标题】:NSDictionary stores copy of redundant objects - how to prevent?NSDictionary 存储冗余对象的副本 - 如何防止?
【发布时间】:2013-03-06 01:19:57
【问题描述】:

我已经构建了一些代码来制作辅助字典来存储主字典的键。所以我可以得到一个值的键。为了使它们唯一,如果有两个或多个相同的值,我将字典对象的 ID 存储为键,将它们的键存储为对象。

但是当两个对象具有相同的值时,它们也具有相同的 ID。因此我无法检索两个不同的密钥:

NSDictionary *myDict = @{@"key1": @"obj1", @"key2": @"obj1", @"key3" : @"x"};
NSLog(@"%p",[myDict objectForKey:@"key1"]);
NSLog(@"%p",[myDict objectForKey:@"key2"]);

输出:

2013-03-06 02:03:28.740 DictTest[2855:303] 0x1000028e8
2013-03-06 02:03:28.741 DictTest[2855:303] 0x1000028e8

如何防止这种情况发生?

【问题讨论】:

  • “ID”是指“地址”吗?如果是这样,NSDictionary 与此无关。 @"obj1" 始终指向同一个对象,无论它在程序中的什么位置使用。
  • 实际上我的意思是 ID。我的目的是获得唯一的值键对。所以我使用第二个字典中的 ID 作为对两者的引用。

标签: nsdictionary redundancy


【解决方案1】:

回答我自己的问题:这不是字典的问题,而是字符串文字的问题。 @"obj1" 总是给出相同的 ID。为了解决这个问题,我必须通过以下方式设置字典:

NSDictionary *myDict = @{@"key1": [NSMutableString stringWithFormat:@"%@",@"obj1"], @"key2": [NSMutableString stringWithFormat:@"%@",@"obj1"], @"key3" : @"x"};

注意“NSMutableString”!您将需要可变对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多