これに対する答えが見つからないようです。ここもドキュメンテーションもありません。多分私は何を探しているべきかわからないのですか?
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
私の理解では、これらは「OR」のビット単位の論理演算子でなければなりません。
この状況で彼らはどのように機能しますか?
これに対する答えが見つからないようです。ここもドキュメンテーションもありません。多分私は何を探しているべきかわからないのですか?
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
私の理解では、これらは「OR」のビット単位の論理演算子でなければなりません。
この状況で彼らはどのように機能しますか?
このように使用されるビット演算子は、ビットマスクと呼ばれる 1 つの変数に複数のブール値フラグを設定する方法です。
もしそうなら
FlagA = 1 << 3; //binary = 1000
FlagB = 1 << 2; //binary = 0100
FlagC = 1 << 1; //binary = 0010
FlagD = 1 << 0; //binary = 0001
そして私は設定しました
myFlag = FlagA | FlagC | FlagD;
それはのまたはです
1000 |
0010 |
0001 =
1011
あなたの例では、単位フラグを時間、分、日、月に設定しています
NSDateComponents
withのビットマスクを設定していNSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit
ます。
したがって、基本的には、すべてのパラメーターを使用したいと言っています。メソッドに 1 つの変数で複数のフラグを指定する場合に便利です。
NSCalendar
は非常に高価なクラスであり、一部のユニットの計算には時間がかかる場合があります。したがって、これらのフラグを使用すると、計算を高速化するためにどの単位を計算するかを指定できます。そこで指定されていない単位は計算されません。
またNSCalendar
、キャッシュを使用する場合、何度も何度も作成するのは非常にコストがかかります。
残りは@ wattson12によって答えられました。