Domanda

Come si utilizza NSCoding per codificare (e decodificare) un array di dieci valori di tipo primitivo int?Codifica ogni intero individualmente (in un ciclo for).Ma cosa succederebbe se il mio array contenesse un milione di numeri interi?Esiste un'alternativa più soddisfacente all'utilizzo di un ciclo for qui?

Modifica (dopo la prima risposta):E decodificare?(@Giustino:Poi segnerò la tua risposta.)

È stato utile?

Soluzione

Se la prestazione è la tua preoccupazione qui:CFData/NSData è compatibile con NSCoding, quindi è sufficiente racchiudere la rappresentazione serializzata dell'array come NSCFData.

modifica per dettagliare la codifica/decodifica:

il tuo array di int dovrà essere convertito in un formato endian comune (a seconda dell'endianness della macchina) - ad es.memorizzarlo sempre come little o big endian.durante la codifica, convertirlo in un array di numeri interi nell'endianness specificato, che viene passato all'oggetto NSData.quindi passa la rappresentazione NSData all'istanza NSCoder.alla decodifica, riceverai un oggetto NSData per la chiave, lo convertirai condizionatamente nell'endianness nativo della macchina durante la decodifica.inizia con una serie di routine di scambio di byte disponibili per OS X e iOS OSSwap*.

in alternativa, vedi -[NSCoder encodeBytes:voidPtr length:numBytes forKey:key].questa routine richiede anche che il cliente scambi l'endianness.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top