找到第三方库中objective-C类没公开的函数并使用NSInvocation调用这个函数
来源:互联网 发布:moment.js实现国际化 编辑:程序博客网 时间:2024/06/03 07:36
近来做到一个项目,用到一个第三类,里面的参数是readonly的, 这个第三方库只有头文件,并没有实现代码
里面的参数在调用一个类方法后就固定了。
但参数里面的默认值不是我想要的,但是这个参数属性是readonly的,怎么办。
首先确认一下有没有对应的setter方法
在真机调试的时候,在debug area上点下暂停按钮,让控制台可用, 在控制台中输入命令:(下图中的product name;工程名字 请自己输入)
image dump symtab (product name)
然后出来一大堆东西
参考第一张图,我们要找的类名是 PLAudioStreamConfiguration, 在控制台里搜索这个名字
发现是有对应属性的相关setter方法的,
在代码里没法直接调用这个方法,然而,我们可以直接调用performSelector 和 NSInvocation;
因为NSInvocation支持多个参数,虽然这里面setter方法只有一个参数,但我也建议用NSInvocation, 以下就是我调用setAudioSampleRate:来修改audioSampleRate的代码了
SEL selector = NSSelectorFromString(@"setAudioSampleRate:");
NSMethodSignature *signature = [[PLAudioStreamingConfiguration class] instanceMethodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.target = audioConfiguration;
invocation.selector = selector;
PLAACSampleRate sampleRate = PLAACSampleRate48000HZ;// 这里是一个enum值
//这里的Index要从2开始,以为0跟1已经被占据了,分别是self(target),selector(_cmd)
[invocation setArgument:&sampleRate atIndex:2];
[invocation invoke];
- 找到第三方库中objective-C类没公开的函数并使用NSInvocation调用这个函数
- 首先检查这个xx类文件是否存在,并调用这个类的构造函数
- Objective-c 使用c函数
- objective-c 调用任意父类函数,父类的父类函数
- 如何调用未公开的API函数
- 如何调用未公开的API函数
- 未公开文档函数的调用
- Objective-C 函数(方法)的定义和调用
- Objective-C 函数(方法)的定义和调用
- iOS调用方法---NSInvocation的使用
- 返回值给函数的一个参数,并在下次调用函数时候直接使用这个值的一个小例子
- 调用uitableview的reloadData函数没效果
- Objective-C中根据函数名调用函数
- Objective-C中根据函数名调用函数
- 关于未公开函数ZwQuerySystemInformation的使用
- Lua调用C函数:tolua++ 的使用
- 使用OC调用C语言的函数
- objective-C 使用包含函数指针的结构体
- CodeForces
- C++学习笔记【第二部分第十章:泛型算法】
- UVA 11183 (最小树形图)
- Java 处理多线程
- dagger2@Scope的一点点
- 找到第三方库中objective-C类没公开的函数并使用NSInvocation调用这个函数
- DNS的解析杂谈,以及gethostbyname的弊端
- 【JS】深拷贝 vs 浅拷贝
- hdu 2516 取石子游戏(斐波拉契博弈)
- NLog
- Python---结巴分词介绍
- 做毕设(五)——继续写css
- 对url 里面的中文使用encodeURI,需要使用二次encodeURI
- Hilditch 细化(实现一)