类型编码 - ShenYj/ShenYj.github.io GitHub Wiki
Objective-C 类型编码
重要信息:
Objective-C
不支持long double
类型。@encode(long double)
返回d
,这与double
编码相同。
Objective-C 方法编码
当研究底层实现的时候可以察觉到,方法sel采用的是一种简式表达方式,我们可以使用@encode()
来获取这种各种类型的Encodings
char *buf1 = @encode(int **);
char *buf2 = @encode(struct key);
char *buf3 = @encode(Rectangle);
e.g.
- (void)say { }
{(struct objc_selector *)"say", "v16@0:8", (void *)_I_HRTest_say1}
-
v
: 返回值,当前方法返回值为空 -
16
:后面参数共占用16字节内存空间 -
@
: 代表第一个参数self(每一个方法都会有一个默认参数self) -
0
: 第一个参数从第0号位置开始 -
:
: 代表一个SEL,即方法编号 -
8
: SEL从第8号位置开始
其他描述信息可以参考苹果原文 Type Encodings