runtime typeencoding

runtime typeencoding,第1张

TypeEncoding,之前忘记介绍函数的编码了

-(void)test:(int)num
{
    NSLog(@"%d",num);
}

-(NSString *)test1:(NSString *)name
{
    return name;
}

这样一个test的typeencoding是个啥,创建一个Person,里面创建个test,test1函数

#import 
#import 
#import "Person.h"
int main()
{
    Method method = class_getInstanceMethod([Person class], @selector(test:));
    printf("%s",method_getTypeEncoding(method));
    return 0;
}

然后使用上述代码就能获取到这个typeEncoding了

结果是: 

v20@0:8i16

@24@0:8@16

v/@ 代表的是返回值,test没有返回值是v test1是@,@不是代表的NSString,而是类

20/24 代表函数结构体的大小

@ 代表第一个参数,因为都是实例函数,所以这个参数是类本身,详见消息机制,然后后面的0表示偏移量,在结构体的第0个位置

: 是选择器,也就是SEL,这里面也复杂,在第8个位置

i/@ 最后一个是参数,test是int 所以是i test1 是NSString所以是@

最后也好理解了类占用8个字节,int是4个字节,所以test占20个字节,而test1是24个字节

 

上面两张图typeencoding的对照表,就不一一去列举了

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/996981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存