2

我有一些将 NSString 作为输入并使用该字符串创建对象的代码。我需要确保它不会对同一个字符串进行两次操作,例如,如果从不同的线程调用,或者即使同一个线程尝试递归地执行它。

我可以先创建一个初始化对象的字典,然后在再次传递相同的字符串时抓取该对象。但这仍然留下了当对象被第二次请求而其他代码正在初始化它时会发生什么的问题。

我看到 Apple 为我提供了 NSLock 类。我不知道如何将它应用于我的问题。我看到 Apple 允许我为我的锁命名,但我看不到任何方法可以使用给定名称访问锁。我想我可以制作一个锁字典,但即使这样似乎也不是万无一失的——如果两个线程同时尝试制作同名的锁怎么办?

谁能在这里指出我正确的方向?

4

1 回答 1

3

用你的所有字符串制作一个静态 NSMutableArray 并同步你的代码怎么样。

当然,您需要先在某处初始化数组;)

也许是这样的:

static NSMutableArray* myArrayWithStrings;

-(void) someMethod:(NSString*) key
{
    @synchronized(myArrayWithStrings)
    {
        if(![myArrayWithStrings containsObject:key])
        {
            NSLog(@"Working with the key %@", key);
            [myArrayWithStrings addObject:key];

        }else
        {
            NSLog(@"Ignoring key '%@'. Already worked with it.",key);
        }
    } 
}
于 2011-08-25T22:17:48.987 回答