我有一些代码将 NSString 作为输入并使用该字符串创建对象。我需要确保它不会对同一个字符串进行两次操作,例如如果从不同的线程调用,或者即使同一个线程尝试递归地执行此操作。
我可以通过创建一个初始化对象的字典开始,如果再次传递相同的字符串,则获取该对象。但这仍然留下了当其他代码正在初始化该对象时第二次请求该对象时会发生什么的问题。
我看到 Apple 为我提供了 NSLock 类。我不知道如何将其应用于我的问题。我看到 Apple 允许我为我的锁命名,但我没有看到任何方法来访问具有给定名称的锁。我想我可以创建一个锁字典,但即使这样似乎也不是万无一失的——如果两个线程尝试同时创建同名的锁怎么办?
有人能指出我正确的方向吗?
最佳答案
如何使用所有字符串创建一个静态 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);
}
}
}
关于iphone - iOS——尝试设置锁字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197800/