1

これに対する答えが見つからないようです。ここもドキュメンテーションもありません。多分私は何を探しているべきかわからないのですか?

unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;

私の理解では、これらは「OR」のビット単位の論理演算子でなければなりません。

この状況で彼らはどのように機能しますか?

4

3 に答える 3

3

このように使用されるビット演算子は、ビットマスクと呼ばれる 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

あなたの例では、単位フラグを時間、分、日、月に設定しています

于 2012-08-17T08:12:18.443 に答える
2

NSDateComponentswithのビットマスクを設定していNSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnitます。

したがって、基本的には、すべてのパラメーターを使用したいと言っています。メソッドに 1 つの変数で複数のフラグを指定する場合に便利です。

于 2012-08-17T08:14:13.043 に答える
1

NSCalendarは非常に高価なクラスであり、一部のユニットの計算には時間がかかる場合があります。したがって、これらのフラグを使用すると、計算を高速化するためにどの単位を計算するかを指定できます。そこで指定されていない単位は計算されません。

またNSCalendar、キャッシュを使用する場合、何度も何度も作成するのは非常にコストがかかります。

残りは@ wattson12によって答えられました。

于 2012-08-17T08:14:41.020 に答える