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 に答える