Given an Objective-C type type
, one can obtain the encoding encoding
and size size
of the type easily:
const char *encoding = @encode(type);
size_t size = sizeof(type);
Put a little differently, we have mappings
@encode: type_t -> const char *
sizeof: type_t -> size_t
This raises two questions:
(1) Suppose that rather than having a type, we have only an encoding. It would be nice to obtain a mapping
sizeofencodedtype: const char * -> size_t
such that for every type_t type
we have that
sizeofencodedtype(@encode(type)) = sizeof(type)
Does such a function already exist? If not, how might one go about building one?
(2) Ideally we could invert the @encode mapping to make a mapping
decode: const char * -> type_t
but this doesn't seem to be possible since type_t isn't a real C type. I guess I could wait for @decode to be added to the language, but that's not very realistic or time-sensitive. But should it not be possible to instantiate a type at runtime using its encoding?
References: Objective-C Runtime Programming Guide - Type Encodings
NSGetSizeAndAlignment() can do this for you. It's also a useful function if you're trying to grope through multiple types in the same string.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With