博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Objective-C方法签名规则的说明
阅读量:2425 次
发布时间:2019-05-10

本文共 1180 字,大约阅读时间需要 3 分钟。

虽然入行iOS开发已多年,但是方法签名这个东西,除了逆向的时候看到过,平时还真没怎么接触过。最近公司项目转成cocos项目,需要修改cocos引擎代码,其中与Native的方法交互用到了方法签名。官方文档看了下说明的很详细了,下面是结合个人理解对方法签名规则的一些总结。如有错误欢迎大家指出。此文禁止转载!!!

    引入#import <objc/runtime.h>

    SEL sel = @selector(methodSignature:);

    Method signM = class_getClassMethod([UIView class], sel);

    const char * s = method_getTypeEncoding(signM);

    NSLog(@"%s",s);

 

/**

    OC 方法签名规则:(v|@)a@0:8(@ | ^v | @? | ^i)b(@ | ^v | @? | ^i)c以此类推

 

    其中v标识void  @标识基本类型和对象类型

    @0:8 是固定部分,将左右分开,左边是返回类型签名(@0为返回的标志)  右边是参数类型签名(:8为SEL方法的标志)

    ^为指针类型,例如^v为void指针类型  ^i为int指针类型

    @?是闭包类型

    关于a,b,c的说明,a为返回值 b为参数1,c为参数2 以此类推N个参数,a的数值为8+1*8,b为8+2*8

    后面以此类推为8+N*8   。最后a的值为8+(N + 1) * 8

 

    举例  v40@0:8@?16^v24@32  此签名为返回值为空,参数一为闭包 参数二为void指针类型 参数三为基本类型或对象类型

 

*/

详细参数类型如下:

// 类型编码枚举enum _NSObjCValueType {    NSObjCNoType = 0,    NSObjCVoidType = 'v',    NSObjCCharType = 'c',    NSObjCShortType = 's',    NSObjCLongType = 'l',    NSObjCLonglongType = 'q',    NSObjCFloatType = 'f',    NSObjCDoubleType = 'd',    NSObjCBoolType = 'B',    NSObjCSelectorType = ':',    NSObjCObjectType = '@',    NSObjCStructType = '{',    NSObjCPointerType = '^',    NSObjCStringType = '*',    NSObjCArrayType = '[',    NSObjCUnionType = '(',    NSObjCBitfield = 'b'}
你可能感兴趣的文章
运维日志20180103—系统关机(软件部分)
查看>>
# 运维日志20180104—系统开机(软件部分)
查看>>
# Fedora 折腾记(一)
查看>>
# 运维日志20180108记录
查看>>
# 运维日志20180109
查看>>
# 运维日志20180110
查看>>
# 运维日志20180111
查看>>
小米笔记本pro系统重置记事
查看>>
Fedora 27添加默认拼音输入法
查看>>
Ubuntu-Budgie折腾记
查看>>
VS Code配置python运行环境
查看>>
个人VS Code配置文件JSON
查看>>
# 维护日志20180123
查看>>
# 运维日志20180213
查看>>
Lustre 2.x文件系统操作手册——前言
查看>>
# Lustre文件系统
查看>>
# 理解Lustre网络(LNet)
查看>>
Note_python(01)
查看>>
Note_python(02)
查看>>
Note_python(03)
查看>>