Objective C - 如何像 NSMutableDictionary 一样使用键保持对多个对象的引用

Objective C - How To Keep Reference To Multiple Objects With Keys Just Like How NSMutableDictionary Works

我刚刚学会了如何使用 KVO,但只是基础知识。我需要实现的是这样的:

我有一个传递 Speaker 对象的委托调用。

- (void)onSpeakerFound:(Speaker *)speaker

一旦我在 UI 部分收到这个 Speaker,我将从那里为这个对象分配观察者。

但是,这只是一位演讲者。如果我有多个扬声器要跟踪怎么办。我需要为这些发言者分别分配观察员,同时我希望保留他们的参考资料以进一步更新这些值。

每个演讲者都可以不时更新。因此,当我注意到扬声器发生变化时,我希望访问对该扬声器的引用并更新值,就像 NSMutableDictionary 的工作方式一样。

NSMutableDictionary 为它创建一个对象的副本,所以如果我再次从字典中获取它,它将是一个不同的对象。

那么,有没有 class 允许我通过只保留对该对象的引用而不复制它来跟踪该对象?

编辑:一项测试,用于验证当在 NSMutableDictionary 中设置实例化对象时,实例化对象未被 NSMutableDictionary 中设置的对象引用。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

    NSString *obj = @"initial value";
    NSString *key = @"key";

    [dict setObject:obj forKey:key];

    NSLog(@"Object is now %@", [dict objectForKey:key]);

    obj = @"changed value";

    NSLog(@"Object is now %@", [dict objectForKey:key]);
}

日志:

2016-07-26 21:04:58.759 AutoLayoutTest[49723:2144268] Object is now initial value
2016-07-26 21:04:58.761 AutoLayoutTest[49723:2144268] Object is now initial value

NSMutableDictionary makes a copy of an object set to it...

这是不正确的;它将向对象添加一个 reference。它将是 Objective-C 集合内外引用的同一个对象。

So, is there a class that allows me to keep track of an object...?

可能 NSMutableSet 如果您只想要一个对象列表。这将确保您拥有对每个对象的唯一引用,但是您需要在这些对象上实现方法 hashisEqual 以便它们正确运行。否则 NSMutableDictionary 如果你想按键快速查找。

-试试这个

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

    NSString *obj = @"initial value";
    NSString *key = @"key";

    [dict setObject:obj forKey:key];

    NSLog(@"Object is now %@", [dict objectForKey:key]);

    obj = @"changed value";
    [dict setObject:obj forKey:Key];

    NSLog(@"Object is now %@", [dict objectForKey:key]);
}