在iOS中放置应用程序广泛日期格式的适当位置在哪里?

时间:2011-12-31 19:43:25

标签: ios design-patterns

在典型的iOS应用程序中,应该在哪里放置应用程序范围的对象?我想集中我的日期格式代码,我有兴趣听取有关最佳做法的建议。

例如,我有以下代码来进行日期格式化:

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *usFormatString = [NSDateFormatter dateFormatFromTemplate:@"EEE, MMM d YYY" options:0 locale:usLocale];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = usFormatString;

((UILabel *)[selectedCell.contentView viewWithTag:1]).text = [formatter stringFromDate:date];

我希望尽可能将格式代码保留为DRY。

编辑:原来这是一个多部分的答案,我采用的方法是使用Singleton的组合并为NSString创建一个Category。我赞成你们大多数人,但我接受了@Jack_Lawrence。

4 个答案:

答案 0 :(得分:2)

我喜欢将Objective-C类别用于那种东西。类别有利于扩展现有对象的能力,尤其是来自您无法控制的框架的对象。确保为方法名称添加前缀,以免与Apple可能实现的当前/未来方法冲突。

在这个特定情况下,我会在NSDate上创建一个名为NSDate + DateFormatting的类别,并实现一个从日期接收器返回NSString的方法:

- (NSString *)JL_stringByFormattingDate
{
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    NSString *usFormatString = [NSDateFormatter dateFormatFromTemplate:@"EEE, MMM d YYY" options:0 locale:usLocale];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = usFormatString;

    return [formatter stringFromDate:self.date];
}

答案 1 :(得分:2)

对于这样的事情,我总是建议使用单例,而不是将函数放在app委托中。

以下文章非常清楚地介绍了如何使用单身人士及其优势。

http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

答案 2 :(得分:1)

通常,“应用程序范围”对象可以通过您添加到应用程序委托的属性来引用。

因此,创建一个NSDateFormatter并将其分配给您可以通过以下内容从代理中引用的属性:

NSDateFormatter * myAppDateFormatter = nil;
MyFineAppDelegate * myAppDelegate = (MyFineAppDelegate *)[[UIApplication sharedApplication] delegate];
if(myAppDelegate)
{
     myAppDateFormatter = myAppDelegate.dateFormatter;
}

答案 3 :(得分:1)

Singleton类是一种可能的解决方案。基本上,无论您从何处调用该对象,它都将返回相同的实例。有关更多信息和方法,请参阅here