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);
        }
    } 
}
Другие вопросы по тегам