0

NSDateFormatter次の便利なメソッドが含まれています。

+ (NSString *)localizedStringFromDate:(NSDate *)date dateStyle:(NSDateFormatterStyle)dateStyle timeStyle:(NSDateFormatterStyle)timeStyle

ドキュメントには、このメソッドを使用することは、明示的にこれを行うことと同じであると記載されています。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setFormatterBehavior:NSDateFormatterBehavior10_4];
[formatter setDateStyle:dateStyle];
[formatter setTimeStyle:timeStyle];
NSString *result = [formatter stringForObjectValue:date];

さて、NSDateFormatterオブジェクトの初期化にはかなりのオーバーヘッドがあることをさまざまな場所で読みました。localizedStringFromDate:etcクラスメソッドに同じオーバーヘッドがあるかどうか、つまりNSDateFormatter、呼び出されるたびにカバーの下で新しいオブジェクトのインスタンス化が発生するかどうかは誰にもわかりませんか?

4

1 に答える 1

1

私はNSDateFormatter遅延して初期化する静的変数として自分の s を使用しています。このように、init ルーチンは 1 回だけ呼び出されます。

static NSDateFormatter *formatter = nil;
if (!formatter) {
   formatter = [[NSDateFormatter alloc] init];
   [formatter setDateStyle:dateStyle];
   [formatter setTimeStyle:timeStyle];
}
NSString *result = [formatter stringFromDate:date]; 
// reuse
[formatter setDateStyle:anotherDateStyle];
[formatter setTimeStyle:anotherTimeStyle];
NSString *anotherResult = [formatter stringFromDate:anotherDate]; 
于 2012-05-30T13:14:26.890 に答える