dispatch_async中的NSDateFormatter

时间:2012-08-24 09:13:41

标签: ios

我对如何在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"]];
    }

    ...

});

1 个答案:

答案 0 :(得分:1)

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

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