反编译的时候发现有个函数用了一个block做参数, 反编译出来的类型是id, 用nslog打印这个参数得到的只是__NSStackBlock__. 那如何可以知道block的参数类型和返回值类型? oc里面好像没有reflection方法去获取block的信息.
用IDA看
1 个赞
赞。干货推荐单独发帖
按照你文章的方法, 可以写个一句话指令po [NSMethodSignature signatureWithObjCTypes:((char**)(((char**)((char*)blockArg + 24))+ 16))] . 这个指令在模拟器里面是正常输出的, 但是在 iphone 真机上输出一个地址, 再 po 一次这个地址就正常了, 比较奇怪.
修正一下, iphone 上用 po [[NSMethodSignature signatureWithObjCTypes:((char**)(((char**)((char*)blockArg + 24))+ 16))] debugDescription]
objective c blocks - iOS NSMethodSignature (or encoding) of NSBlock - Stack Overflow
http://stackoverflow.com/questions/12715586/ios-nsmethodsignature-or-encoding-of-nsblock
发现一个库: GitHub - ebf/CTObjectiveCRuntimeAdditions: Objc runtime additions.
新开了个帖
这个库很方便啊,之前怎么没想到自己封装一个