类型编码 - ShenYj/ShenYj.github.io GitHub Wiki

类型编码

Objective-C 类型编码

Objective-C类型编码

重要信息:Objective-C不支持long double类型。@encode(long double)返回d,这与double编码相同。

Objective-C 方法编码

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

⚠️ **GitHub.com Fallback** ⚠️