0

コードは次のようになります。

NSDateFormatter *formatter;
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyMMdd"];

for (int i=0; i<10000; i++) {

    dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(aQueue, ^{
    NSString *dateKey = [formatter stringFromDate:[NSDate date]];


        NSLog(dateKey);


    });

}

datekey は時々 47130101 ですか? 通常の値は 20120608 のようなものですが、47130101 になることもあります。

4

3 に答える 3

1

あなたのコードは完全に有効です、私はそれをチェックするために何度か試しました、そしてそれは有効です。

これを試して:

NSLog(@"%@", dateKey);

そして、あなたはそれを見るでしょう。おそらくあなたは他の部分で混乱しているでしょう。

于 2012-06-08T08:20:40.240 に答える
0

NSDateFormatter複数のスレッドで同時に 同じオブジェクトを使用したくないことは間違いありません。

スレッドセーフは、NSDateFormatter が明示的にスレッドセーフでないことを示しています。

とにかくGCDでこれを行う場合は、複数のNSDateFormatters(実際にこれらを10,000回実行する必要がある場合はプール)を使用するか、主な関心事が「誤って」使用する場合はアクセスをシングルスレッドにすることをお勧めしますそれを複数のスレッドで。

後者を選択する場合は、NSDateFormatter 専用のシリアル ディスパッチ キューを作成し、それを使用してアクセスを制御し、一度に 1 つのスレッドでのみ実行されるようにします。衝突します。

于 2012-06-08T10:43:41.840 に答える
-4
  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setDateFormat:@"yyyyMMdd"];
  NSString *dateKey = [formatter stringFromDate:[NSDate date]];
于 2012-06-08T08:12:49.633 に答える