• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

找到第三方库中objective-C类没公开的函数并使用NSInvocation调用这个函数 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

近来做到一个项目,用到一个第三类,里面的参数是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];




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-C面向对象之实现类发布时间:2022-07-12
下一篇:
iOS Objective-C 自定义饼状图发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap