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的对照表,就不一一去列举了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)