2011-10-21 6 views
3

dateAとdateBは常に異なるでしょうか?お互いに続く2つの[NSDate date]は常に異なる時刻を返しますか?

// Two [NSDate date] following each other 
NSDate *dateA = [NSDate date]; // Line X 
NSDate *dateB = [NSDate date]; // Line X+1 

つまり、以下の行は常にNOを返しますか? (非常に高速なプロセッサのようdateAとdateBは「サブ秒」の精度で同じ時間に割り当てられることが非常に速く2つのコマンドを実行しないであろうことを意味する「常に」)

[dateA isEqualToDate:dateB] 

内部識別(DB関連ではありません)のために「ユニーク」タイムスタンプが必要です。

+1

これは、ある意味では、これが間違った質問である場合として私を襲う。実際に達成しようとしていることを教えていただければ、より良い指導を受けることができます。 –

答えて

4

dateBdateAの後になるという約束はありません。 NSDateはシステムクロックに基づいており、NTP情報に基づいて前進または後退することができます。 2つの時間が衝突するのはかなり驚くかもしれませんが、それは起こらないという約束はありません。

少しでも良いものが必要な場合は、mach_absolute_time()またはCACurrentMediaTime()をお勧めします。プログラムの実行中は常に増加します。それらはデバイスの最後の起動からの時間を測定しているので、次の再起動までは一意です。常に増加するものが必要な場合は、オフセットを追跡して構築するのはかなり簡単です。 mach_absolute_time()はCPUチックを追跡するので、同じスレッド上で2つの呼び出しが同じ値を返すとは思いません。

0

技術的に言えば、はい。 NSDateへの呼び出しは、同時にではなく順番に行われるため、呼び出し間の時間には若干の違いがあります。しかし、ユニークなタイムスタンプを探しているなら、それは大丈夫です。

2

タイミングに依存する可能性はありますが、それらは同じである可能性はありません。現在の時刻が返されるドキュメントの状態。それらの2行の実行の間に変更することができます。

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html#//apple_ref/doc/uid/20000188-date

あなたがユニーク必要がある場合は、GUIDの生成をご覧ください。チェックアウトは、この:

http://developer.apple.com/library/mac/#documentation/CoreFoundation/Reference/CFUUIDRef/Reference/reference.html

+0

@PengOneとあなたの回答が矛盾していませんか?誰が正しいですか? – Cotten

+0

あなたは保証された文書化されたユニークな(CFUUIDRef)、あるいは多分文書がクリアなユニーク(NSDate)ではないでしょうか?もし誰かがNSDateで明らかにいずれかの方法を述べている文書を提供できれば、私はそれを見たいと思っています。 – logancautrell

+0

hehe、はい私のニーズは「保証された文書化されたユニーク」と「多分しかし文書は明確ではありません」の中間にあります..私も誰かが明確な証拠を示すことを望んでいました:) – Cotten

0

NSDateは、サブミリ秒の精度を持っているので、あなたが同じタイムスタンプで終わるだろうシナリオを想像するのは難しいです。将来のハードウェアの高速化は、パフォーマンスの向上に伴いタイミングの精度も向上することが期待されます。

簡単なサンプルコードは、介入コードなしで一連のNSDateを取得するだけです。私は彼らがあなたがうまくいくことを示す最終的な小数点以下の桁をはるかに賭けていると確信しています。

関連する問題