4

我希望能够做到以下几点:

NSString *hoursAndMinutes = [myNSDateObject formattedTime]; // eg. 10:25

现在我可以在类上创建一个类别,NSDate但由于NSDateFormatter事实证明创建的成本非常高,我想使用我的NSDateFormatter. 这是否与类别的概念相矛盾,还是有更简洁的方法来实现这一点?

4

3 回答 3

10

类别只会让您维护静态变量。但是对于您的实例,这将完美无缺。

为您的格式化程序创建一个类别

标题

@interface NSDateFormatter (myFormats)

+ (NSDateFormatter*) specialFormatting;

@end

实施文件

@implementation NSDateFormatter (myFormats)

+ (NSDateFormatter*) specialFormatting{
    static NSDateFormatter *_specialFormatting;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _specialFormatting = [[NSDateFormatter alloc] init];
        // Continue Setting up this format;
    });
    return _specialFormatting;
}

@end

然后确保在你想使用它的地方包含你的标题(我使用 prefix.pch 文件来包含我一直使用的东西)

那么您将不需要声明它并且可以从它所在的位置使用它。并且每次您需要时都不会创建该项目..

该对象永远不会被释放。但这就是你想要的。因为它仍然可以访问,所以它不是内存泄漏。

您还可以提供帮助方法,让您只取回字符串。

希望有帮助。

于 2012-06-27T17:37:49.547 回答
3

您可以为此使用静态变量(在文件范围或方法范围内),也可以将 NSDateFormatter 包装在单例中以从类别中使用。

我不会说这与类别的概念相矛盾,但可以肯定的是,对于许多程序员来说,使用静态变量或单例并不总是最好的事情。

于 2012-06-27T17:31:39.030 回答
1

您也可以在方法中创建静态变量。

于 2012-06-27T17:31:46.883 回答