Object-c type encodings类型编码

2021-03-15  本文已影响0人  spyn_n

为了和运行时系统协作,编译器将方法的返回类型和参数类型都编码成一个字符串,并和方法_cmd关联。我们可以通过给定一个类型,使用@encode() 编译指令来获得具体的编码。类型可以使基本类型,指针,结构体,联合体,类。

编码        含义

c                 A char

i                  An int

s                 A shot

l                 A long

q                A long long

C                   An unsigned char

I                 An unsigned int    

S               An unsigned short

L               An unsigned long

Q              An unsigned long long

f             A float

d              A double

B             C++ 标准的bool 或者  C99标准的 _Bool

v              A void

*             A character string (char *)

@             对象(无论是静态指定的还是通过id引用的)

#              类(class)

:              方法符号_cmd (SEL) 

?             A unknown type (其他时候,一般指函数指针)

[array type]      数组  eg:[12^f] 代表一个12个浮点数指针的数组

{name=type...}   结构体

eg:结构体

typedef struct example{

    id    anObject;

    char *aString;

    int anInt;

}Example;

编码是:{example=@*i}

(name=type...)    联合体

bnum        num 个bit的位域

^type        type类型的指针

注意:Object-C不支持long double类型,@encode(long double)和double一样,返回的字符串都是d


尽管有一些编码无法从@encode()的结果中直接得到,但是运行时系统会使用他们来表示协议类中方法的修饰符,如表


上一篇下一篇

猜你喜欢

热点阅读