1

NSInteger 是否足以跟踪修饰符标志?(cmd / alt / ctrl 等)。

我注意到在一个事件上它返回一个 NSUinteger(无符号)([theEvent modifierFlags])而不是一个 NSInteger,但是从我的测试来看,当我将修饰符掩码保存在 NSInteger 中时,它似乎工作得很好。

我需要一个 NSInteger 因为我将修饰符掩码保存为某些控件的标记。

4

2 回答 2

4

NSInteger 和 NSUInteger 的大小相同(即相同的位数)。不同之处在于,在执行算术等操作时,这些位是否被认为代表有符号数或无符号数。如果您只是通过按位运算来操作数字,那并不重要。也就是说,您应该使用相关方法返回的相同类型,在本例中为 NSUInteger。在这里使用无符号的原因是,当所讨论的值实际上是一堆要独立设置/清除的位时,从概念上讲,该值具有符号位是没有意义的。

于 2013-03-02T21:18:54.243 回答
1

正如安德鲁所说,我只想添加一些东西。如果您使用的是位标志,从您在 iOS 6 中的问题来看,他们引入了一个新宏,这似乎是新的“Apple 方式”

typedef NS_OPTIONS(NSInteger, CustomType) {
    kCmdKey = 1 << 0,
    kAltKey = 1 << 1,
    ctrlKey = 1 << 2,
};

还有一个宏 NS_ENUM,用于不用作位掩码的枚举。在 NS_OPTIONS 和 NS_ENUM 中,您都可以指定要使用的类型(NSInteger)和您的 typedef 类型名称。

于 2013-03-02T22:28:35.223 回答