2013-03-02 7 views
1

수정 자 플래그를 추적 할만큼 NSInteger입니까? (cmd/alt/ctrl 등).수정 자 플래그 : NSInteger만큼?

이벤트에서 NSInteger 대신 NSUinteger (unsigned) ([theEvent modifierFlags])를 반환하지만 NSInteger에 수정 자 마스크를 저장하면 테스트에서 정상적으로 작동하는 것으로 나타납니다.

수정 자 마스크를 특정 컨트롤의 태그로 저장하므로 NSInteger가 필요합니다.

답변

4

NSInteger와 NSUInteger는 같은 크기 (즉, 동일한 비트 수)입니다. 차이점은 산술을 수행 할 때 비트가 부호가 있거나 부호없는 숫자를 나타내는 것으로 간주되는지 여부입니다. 비트 연산으로 숫자를 조작 한 경우에는 별 문제가되지 않습니다. 즉, 문제의 메서드가 반환하는 것과 동일한 형식 (이 경우 NSUInteger)을 사용해야합니다. 여기서 부호없는 비트를 사용하는 이유는 해당 값이 실제로 독립적으로 설정/지워지는 비트 집합 일 때 개념적으로 해당 값이 부호 비트를 가지지 않는다는 것입니다.

1

Andrew가 말했듯이, 나는 단지 뭔가를 추가하고 싶습니다. 가 사용되지 않는 열거를 들어, 새로운 "애플의 방식"

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

또한 매크로 NS_ENUM이 보인다 그들이 새 매크로를 소개 아이폰 OS 6에 질문에서 보인다는 비트 플래그를 사용하는 경우 비트 마스크. 둘 다 NS_OPTIONS 및 NS_ENUM에서 사용할 유형 (NSInteger)과 사용자의 typedef 유형 이름을 지정할 수 있습니다.

+1

이 질문과 직접 ​​관련이있는 것은 아니지만 (자신의 깃발을 정의하는 것처럼 보이지는 않습니다.) +1하지만이 새로운 매크로는 매우 유용하며 아직 널리 알려지지 않았기 때문에 +1합니다. –