2011-11-26 17 views
11

asigna un tipo de Objective-C type, se puede obtener el encodingencoding y tamaño size del tipo fácilmente:¿Cómo se puede obtener el tamaño de un tipo para el que se tiene una codificación?

const char *encoding = @encode(type); 
size_t size = sizeof(type); 

Ponga un poco diferente, que tienen asignaciones

@encode: type_t -> const char * 
sizeof: type_t -> size_t 

Esto plantea dos cuestiones :

(1) Supongamos que en lugar de tener un tipo, solo tenemos una codificación. Sería bueno para obtener un mapeo

sizeofencodedtype: const char * -> size_t 

tal que para cada type_ttype tenemos que ya exista de

sizeofencodedtype(@encode(type)) = sizeof(type) 

tal función? Si no, ¿cómo se puede construir uno?

(2) Lo ideal sería que podría invertir la @encode mapeo para hacer un mapeo

decode: const char * -> type_t 

pero esto no parece ser posible ya que type_t no es un verdadero tipo C. Supongo que podría esperar @decode para agregar al idioma, pero eso no es muy realista ni sensible al tiempo. Pero, ¿no debería ser posible crear una instancia de un tipo en tiempo de ejecución utilizando su codificación?

Referencias: Objective-C Runtime Programming Guide - Type Encodings

Respuesta

12

NSGetSizeAndAlignment() puede hacer esto para usted. También es una función útil si intenta buscar a tientas varios tipos en la misma cuerda.

+0

¡Gracias! Esto es _exactamente_ lo que necesitaba. –

+1

Pasé probablemente dos horas tratando de encontrar diferentes maneras de decir esto y me encontré con una pregunta de referencia. ¡Gracias! –

Cuestiones relacionadas