2013-08-09 32 views
5

NSUInteger ürününün NSCoder ile kodlamasını ve kodunu çözmem gerekiyor.NSCoder :: encodeInteger: forKey: ve decodeIntegerForKey: NSUInteger türünde bir argümanı olan yöntemleri kullanabilir miyim?

Bunun için NSCoder::encodeInteger:forKey: ve NSCoder::decodeIntegerForKey: yöntemlerini kullanmak güvenli midir?

Bunun aklıma gelen başka bir şey, önce işaretsiz tamsayı NSNumber içine sarmaktır. Ama bu daha fazla kod anlamına geliyor ve ben fazla sevmiyorum. forKey: ve NSCoder :: decodeIntegerForKey: bunun için yöntemler

cevap

5

güvenli NSCoder :: encodeInteger kullanımı var mı? OS X ve iOS üzerindeki tüm mimariler imzalı sayıların gösterimi için ikinin tamamlayıcısı kullandıkları için

Evet, bu güvenlidir. Örneğin -1 aynı hafıza gösterimi olan bir işaretli tamsayı dönüştürülür

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

n de, (32-bit varsayılarak). Özgün değerini geri almak, böylece

Ve

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

işaretli tamsayı -1 yılında

, aynı bellek gösterimi ile işaretsiz bir tamsayı geri dönüştürülür.

+0

Bu yanıt 64 bit mimari için geçerli mi? – rmtheis

+0

@rmtheis: Evet, eminim ki (NSUInteger 64 bit mimarilerde 64 bitlik bir tamsayıdır. Sadece 32 bitlik bir örnek verdim). –