2013-08-09 1 views
5

NSUInteger 유형의 속성을 NSCoder으로 인코딩 및 디코딩해야합니다.NSCoder :: encodeInteger : forKey : 및 decodeIntegerForKey : NSUInteger 유형의 인수를 사용하는 메서드를 사용할 수 있습니까?

NSCoder::encodeInteger:forKey:NSCoder::decodeIntegerForKey: 방법을 사용하는 것이 안전합니까?

다른 말로하면, 부호없는 정수를 NSNumber에 먼저 래핑하는 것입니다. 그러나 그것은 더 많은 코드를 의미하며 나는 그것을별로 좋아하지 않습니다. forKey : 및 NSCoder :: decodeIntegerForKey : 그 방법

답변

5

는 안전 NSCoder :: encodeInteger을 사용할 수 있나요? OS X와 ​​iOS에서 모든 아키텍처에 서명 숫자를 표현하기위한 2의 보수 을 사용하기 때문에

예, 그것은 안전합니다. 예를 들어 -1있는 동일한 메모리 표현 인 부호 정수로 변환된다

NSUInteger n = 0xFFFFFFFF; 
[aCoder encodeInteger:n forKey:@"n"]; 

n에서, (32 비트 구조를 가정). 원래 값을 다시 얻을 수 있도록

그리고

NSUInteger n = [aDecoder decodeIntegerForKey:@"n"]; 

부호있는 정수 -1에서

는 동일한 메모리 표현 인 부호없는 정수로 다시 변환됩니다.

+0

이 대답은 64 비트 아키텍처에서도 유효합니까? – rmtheis

+0

@rmtheis : 예, 확신합니다 (NSUInteger는 64 비트 아키텍처에서 64 비트 정수입니다.) 32 비트 용 예제를 제공했습니다.) –

관련 문제