0

我对如何在 dispatch_async 中使用 NSDateFormatter 感到有点困惑。我已经读到它不是线程安全的,但这是否意味着我每次在 dispatch_async 中使用它时都必须创建它的新实例,或者我可以将它用作静态代码,如下面的代码所示?由于它是一个串行队列,我猜它不能同时从多个地方访问?

dispatch_async(video_sync_request_operation_processing_queue(), ^{

    static NSDateFormatter *dateFormatter = nil;
    if (!dateFormatter) {
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
        [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
    }

    ...

});
4

1 回答 1

1
  1. 如果是串行队列你不应该担心线程安全,因为这些任务永远不会同时工作。

  2. 如果您想在并发线程上使用不是线程安全的类实例,您应该为您将使用它的实例专门创建一个串行队列。

于 2012-08-24T10:16:34.977 回答