2010-10-04 18 views
0

Comment utilisez-vous NSCoding pour coder (et décoder) une matrice de dix valeurs de type primitif int? Encoder chaque entier individuellement (dans une boucle for). Mais que se passe-t-il si mon tableau contient un million d'entiers? Existe-t-il une alternative plus satisfaisante à l'utilisation d'un for-loop ici?NSCoding et tableaux d'entiers

Éditer (après la première réponse): Et décoder? (@Justin: Je vais alors cocher votre réponse.)

Répondre

2

Si la performance est votre préoccupation ici: CFData/NSData est conforme NSCoding, alors enveloppez votre représentation sérialisée de la matrice en tant que NSCFData.

modifier détail codage/décodage:

votre tableau de ints devra être converti en un format endian commun (selon le boutisme de la machine) - par exemple rangez-le toujours en petit ou gros boutiste. lors du codage, convertissez-le en un tableau d'entiers dans l'endianness spécifiée, qui est transmise à l'objet NSData. passez ensuite la représentation NSData à l'instance NSCoder. Au décodage, vous recevez un objet NSData pour la clé, vous le convertissez conditionnellement à l'endianness natif de la machine lors du décodage. un jeu de routines d'échange d'octets disponibles pour OS X et iOS commence par OSSwap*. En variante, voir -[NSCoder encodeBytes:voidPtr length:numBytes forKey:key]. cette routine nécessite également que le client échange son endianness.

+0

Et décoder, c'est à dire. récupérer le grand tableau int de l'objet de données? – SK9

+0

@SpecialK détaillé dans la réponse éditée – justin