修改器标志:NSInteger足够了吗?

时间:2013-03-02 20:44:52

标签: objective-c xcode cocoa

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

正如安德鲁所说,我只想补充一些东西。 如果您正在使用iOS标签中的问题,那么它们会引入一个新的宏,这似乎是新的“Apple方式”

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

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