iOS - пытается настроить словарь блокировок
У меня есть код, который принимает NSString в качестве входных данных и использует эту строку для создания объекта. Мне нужно убедиться, что он не работает с одной и той же строкой дважды, например, если он вызывается из разных потоков или даже если один и тот же поток пытается сделать это рекурсивно.
Я могу начать с создания словаря моих инициализированных объектов и захвата этого объекта, если снова передать ту же строку. Но это все еще оставляет проблему того, что происходит, когда объект запрашивается второй раз, когда другой код его инициализирует.
Я вижу, что Apple предоставила мне класс NSLock. Я в растерянности относительно того, как применить это к моей проблеме. Я вижу, что Apple позволяет мне называть свои замки, но я не вижу способа получить доступ к замку с заданным именем. Я полагаю, что мог бы составить словарь блокировок, но даже это не кажется пуленепробиваемым - что, если два потока пытаются сделать блокировку одного и того же имени одновременно?
Кто-нибудь может указать мне правильное направление здесь?
1 ответ
Как насчет создания статического 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);
}
}
}