iOS - пытается настроить словарь блокировок - PullRequest
2 голосов
/ 26 августа 2011

У меня есть код, который принимает строку NSString и использует эту строку для создания объекта.Мне нужно убедиться, что он не работает с одной и той же строкой дважды, например, если он вызывается из разных потоков или даже если один и тот же поток пытается сделать это рекурсивно.

Я могу начать с создания словаряиз моих инициализированных объектов и захват этого объекта, если передал ту же строку снова.Но это все еще оставляет проблему того, что происходит, когда объект запрашивается второй раз, когда другой код инициализирует его.

Я вижу, что Apple предоставила мне класс NSLock.Я в растерянности относительно того, как применить это к моей проблеме.Я вижу, что Apple позволяет мне называть свои замки, но я не вижу способа получить доступ к замку с данным именем.Полагаю, я мог бы составить словарь блокировок, но даже это не кажется пуленепробиваемым - что, если два потока пытаются сделать блокировку одного и того же имени одновременно?

Может ли кто-нибудь указать мне правуюнаправление здесь?

1 Ответ

3 голосов
/ 26 августа 2011

Как насчет создания статического массива 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);
        }
    } 
}
...