我似乎找不到这个问题的答案。这里也没有文档。也许我不确定我应该寻找什么?
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
据我了解,这些应该是“OR”的逻辑按位运算符
他们如何在这种情况下工作?
我似乎找不到这个问题的答案。这里也没有文档。也许我不确定我应该寻找什么?
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
据我了解,这些应该是“OR”的逻辑按位运算符
他们如何在这种情况下工作?
像这样使用的位运算符是一种在一个变量中设置多个布尔标志的方法,称为位掩码
因此,如果
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
。
所以基本上你是说你想使用所有的参数。如果您想在一个变量中为方法提供多个标志,这很有用。
NSCalendar
是相当昂贵的课程,某些单位的计算可能需要很长时间。因此,使用这些标志,您可以指定要计算的单位以使其更快。没有指定的单位将不计算。
此外,当您使用NSCalendar
, 缓存它时,一次又一次地创建它真的很昂贵。
休息由@wattson12 回答。