2013-03-02 74 views
1

NSInteger足以跟蹤修飾符標誌嗎? (cmd/alt/ctrl等)。我注意到一個事件它返回一個NSUinteger(無符號)([theEvent modifierFlags]),而不是一個NSInteger,但從我的測試,它似乎工作得很好,當我在NSInteger保存修飾符掩碼。修飾符標誌:NSInteger足夠嗎?

我需要一個NSInteger,因爲我將修飾符掩碼保存爲某些控件的標記。

回答

4

NSInteger和NSUInteger的大小相同(即相同的位數)。不同之處在於,在執行算術運算時,這些位是否被認爲代表有符號或無符號數字。如果您只是通過按位操作來操作數字,那麼它並不重要。也就是說,你應該使用與所討論的方法返回的類型相同的類型,在這種情況下是NSUInteger。這裏使用無符號的原因是,當所討論的值真的是一堆要獨立設置/清除的位時,從概念上來說這個值沒有符號位。

1

正如安德魯所說,我只是想補充一些東西。 如果您正在使用bitflags,因爲它從你的問題在iOS 6中,他們引入了一個新的宏,這似乎是新的「蘋果方式」

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

也有宏觀NS_ENUM,對於不作爲枚舉似乎位掩碼。 在NS_OPTIONS和NS_ENUM中,您都可以指定要使用的類型(NSInteger)和typedef類型名稱。

+1

這與問題沒有直接關係(他似乎沒有定義他自己的標誌),而是+1,因爲這些新的宏很有用,而且似乎還沒有廣爲人知。 – 2013-03-03 03:47:34