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 中执行此操作,要么使用多个 NSDateFormatter(如果你真的需要做 10,000 个,可能是一个池),或者如果你的主要问题是“意外”使用单线程访问它在多个线程中。

如果你选择后者,我会为 NSDateFormatter 创建一个专用的串行调度队列,并使用它来控制访问,这样它一次只能在一个线程上运行,否则如果你不太可能会快速执行发生碰撞。

于 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 回答