runtime typeencoding

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

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

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

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

#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#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的对照表,就不一一去列举了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值