2

NSStringを入力として受け取り、その文字列を使用してオブジェクトを作成するコードがあります。たとえば、異なるスレッドから呼び出された場合や、同じスレッドが再帰的に実行しようとした場合でも、同じ文字列で2回動作しないようにする必要があります。

初期化されたオブジェクトの辞書を作成し、同じ文字列が再度渡された場合はそのオブジェクトを取得することから始めることができます。しかし、これでも、他のコードがオブジェクトを初期化しているときにオブジェクトが2回要求されたときに何が起こるかという問題が残ります。

AppleがNSLockクラスを提供してくれたようです。私はそれを私の問題にどのように適用するかについて途方に暮れています。Appleが私のロックに名前を付けることを許可しているのを見ますが、指定された名前でロックにアクセスする方法がわかりません。ロックの辞書を作成できると思いますが、それでも防弾ではないようです。2つのスレッドが同時に同じ名前のロックを作成しようとするとどうなりますか?

誰かが私をここで正しい方向に向けることができますか?

4

1 に答える 1

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);
        }
    } 
}
于 2011-08-25T22:17:48.987 に答える