Rendimiento: estructuras en NSValue vs object contenedor

En una situación en la que necesito save todos los miembros de datos en un NSDictionary , ¿tiene más sentido poner estructuras (types personalizados, o incluso escalares, por ejemplo, CGPoint ) en mi propio contenedor (no NSValue ), así puedo evitar la sobrecarga de la encoding / decodificándolo cada vez que obtengo o establezco el miembro?

Para grandes estructuras (16 flotadores), el ahorro es IMO significativo. Pero incluso con un CGPoint estaría guardando 4 bytes de copy más time de encoding / deencoding.

¿Por qué no solo medirlo para su caso específico? Esa es la única manera realmente confiable de descubrirlo.

Si ambas opciones no son suficientes, puede search en CFDictionary con pointers a estructuras simples, configurando las devoluciones de valor de acuerdo con esto o tomar un C ++ std::map / std::tr1::unordenetworking_map para un giro (si no le molesta mezclar C ++ que es).

En realidad, puede dar un paso más: Abandonar la estructura por completo y convertirla en un object model. A continuación, puede integrar la lógica (por ejemplo, properties computadas) en él y darle la capacidad de codificar y decodificar en cualquier formatting relevante, así como ponerlo en collections.

Bueno, NSDictionary types requieren objects como sus miembros de todos modos, por lo que no puede almacenar una estructura en un NSDictionary. Tendrías que envolverlo en un object contenedor.