1

NSIntegerは、修飾子フラグを追跡するのに十分ですか?(cmd / alt / ctrlなど)。

イベントでNSIntegerの代わりにNSUinteger(unsigned)([theEvent modifyFlags])を返すことに気付きましたが、私のテストから、モディファイアマスクをNSIntegerに保存すると正常に機能しているように見えます。

特定のコントロールのタグとして修飾子マスクを保存しているため、NSIntegerが必要です。

4

2 に答える 2

4

NSInteger と NSUInteger は同じサイズ (つまり、同じビット数) です。違いは、算術演算などを実行するときにビットが符号付きまたは符号なしの数値を表すと見なされるかどうかです。ビットごとの演算で数値を操作するだけであれば、それは実際には問題になりません。とはいえ、問題のメソッドが返すのと同じ型 (この場合は NSUInteger) を使用する必要があります。ここで unsigned を使用する理由は、問題の値が実際には個別に設定/クリアされる一連のビットである場合、その値が符号ビットを持つことは概念的に意味がないからです。

于 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 に答える