2013-08-09 30 views
5

Tôi cần mã hóa và giải mã thuộc tính của loại NSUInteger với NSCoder.Tôi có thể sử dụng NSCoder :: encodeInteger: forKey: và decodeIntegerForKey: phương thức với đối số kiểu NSUInteger không?

Có an toàn khi sử dụng các phương pháp NSCoder::encodeInteger:forKey:NSCoder::decodeIntegerForKey: cho điều đó không?

Cách khác xung quanh ý tưởng của tôi là quấn số nguyên chưa dấu vào NSNumber trước tiên. Nhưng điều đó có nghĩa là một số mã hơn và tôi không thích nó nhiều.

Trả lời

5

Có an toàn khi sử dụng NSCoder :: encodeInteger: forKey: và NSCoder :: decodeIntegerForKey: phương pháp cho điều đó không?

Vâng, nó là an toàn, bởi vì tất cả các kiến ​​trúc trên OS X và iOS sử dụng hai của bổ sung cho đại diện cho số ký. Ví dụ (giả sử một kiến ​​trúc 32-bit), trong

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

n được chuyển đổi sang một số nguyên ký với đại diện bộ nhớ tương tự, đó là -1.

Và trong

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

số nguyên ký -1 được chuyển đổi trở lại một số nguyên unsigned với đại diện bộ nhớ như nhau, do đó bạn lấy lại giá trị ban đầu.

+0

Câu trả lời này có đúng với kiến ​​trúc 64 bit không? – rmtheis

+0

@rmtheis: Vâng, tôi khá chắc chắn nó (NSUInteger là một số nguyên 64-bit trên kiến ​​trúc 64-bit. Tôi vừa đưa ra một ví dụ cho 32-bit). –

Các vấn đề liên quan