【发布时间】:2011-06-20 17:57:54
【问题描述】:
我的团队发现我们在整个代码库中使用了各种 NSDateFormatter 对象,并开始研究如何避免在一堆不同的地方分配/初始化通用格式化程序的成本/混乱。
我们的一个想法是在NSDateFormatter 类上创建一个类别,该类别将提供对通常配置的格式化程序的静态实例的引用。例如,我们在几个地方使用“短时间”日期格式化程序,并希望添加以下类方法:
@implementation NSDateFormatter (NSDateFormatter_PDDateFormatters)
static NSDateFormatter * shortTimeFormatter = nil;
+ (NSDateFormatter *) PDSharedShortTimeFormatter {
@synchronized([NSDateFormatter class]){
if( shortTimeFormatter == nil){
// Create new formatter for SHORT times (e.g. 12:00 pm)
shortTimeFormatter = [[NSDateFormatter alloc] init];
[shortTimeFormatter setDateStyle: NSDateFormatterNoStyle];
[shortTimeFormatter setTimeStyle:NSDateFormatterShortStyle];
}
return shortTimeFormatter;
}
return nil;
}
@end
我在使用这种方法时遇到的一个问题是,我们目前没有“保护”NSDateFormatter 不被更改。由于格式化程序本质上是在整个应用程序中“共享”的,如果另一个对象要更改格式化程序的配置(例如时间/日期样式),这可能会导致问题。
因为我们在内部使用此功能,所以我不太担心我们的团队滥用此功能的风险(即,它是一个小团队,并且已明确评论)。
但是,我想知道这里的最佳做法。
有没有办法返回对日期格式化程序的不可变引用?如果我返回一个格式化程序的副本,这是否比我们现在正在做的分配/初始化更便宜?
这里有其他方法可以采取吗?
我们将着手进行这项工作,但在编写“更好”的代码时获得一些反馈总是好的。
【问题讨论】:
标签: objective-c cocoa-touch cocoa nsdateformatter