我在一些线程上看到,用户创建类别以共享NSDateFormatter
的静态实例。
我的应用有多个部分和一个singleton
类,每个部分都有多个视图,有些视图使用NSDateFormatter
。我使用singleton
在部分之间共享数据,而不必重复网络连接。
我很少担心formatters
的费用,为了解决这个问题,我可以在singleton
班级和alloc
上创建一个方法,{{1} } init
那里,它会在整个时间内,我可以使用formatter
或者我可以在每个部分的主视图上创建一个,所以至少我不需要每个视图一个。
我想category
上的方法就是这样,对吗?
singleton
我的问题是,降低+ (NSDateFormatter *)sharedDateFormatter
{
static NSDateFormatter *sharedDateFormatter = nil ;
if (sharedDateFormatter == nil)
{
sharedDateFormatter = [[NSDateFormatter alloc] init] ;
[sharedDateFormatter setLocale: [[[NSLocale alloc] initWithLocaleIdentifier: @"en_GB"] autorelease]] ;
[sharedDateFormatter setDateFormat: @"YYYY-MM-dd HH:mm:ss ZZZ"] ;
}
return sharedDateFormatter ;
}
费用的最佳做法是什么?
答案 0 :(得分:3)
单身就好了,但我会使用dispatch_once模式。
问题:NSDateFormatter不是线程安全的。如果您仅在同一个线程上使用相同的NSDateFormatter,或者例如在同一个串行调度队列中,那就没问题。否则,您必须使代码线程安全,或者使用多个NSDateFormatters,每个线程一个。