我有一些代码将NSString作为输入并使用该字符串来创建对象。我需要确保它不会在同一个字符串上运行两次,例如如果从不同的线程调用,或者即使同一个线程试图以递归方式执行它。
我可以通过制作我的初始化对象的字典并在再次传递相同的字符串时抓取该对象来开始。但是这仍然留下了在其他代码初始化时第二次请求对象时会发生什么的问题。
我看到Apple为我提供了NSLock类。我不知道如何将它应用到我的问题中。我看到Apple让我为我的锁命名,但我没有看到任何方法来访问具有给定名称的锁。我想我可以制作一本锁字典,但即使这样也不是防弹的 - 如果两个线程试图同时锁定同一个名字呢?
有人能指出我在正确的方向吗?
答案 0 :(得分: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);
}
}
}