如何调配AudioSessionAddPropertyListener

时间:2013-09-25 00:58:12

标签: ios objective-c core-foundation swizzling

我的项目中有一个添加音频属性侦听器的库。我真的需要能够阻止它这样做,但我没有源代码。

我之前为NSNotificationCenter中的addObserver方法做了一个混合。你能帮我做同样的AudioSessionAddPropertyListener吗?如果尝试添加到通话中的方法与我的白名单不匹配,我想阻止它。否则,我会调用原始方法。

我不知道应该为哪个类重载load函数。我在里面看 Audio.h。我正在添加一些伪/真实/差错命名代码,以便您可以看到我正在尝试做的事情。

#import <AudioToolbox/AudioToolbox.h>
@interface AuidoClassUmm (SOMETHING)
@end

+ (void) load
{
    Method original, swizzled;
    original = class_getInstanceMethod(self, @selector(AudioSessionAddPropertyListener:selector:name:object:));
    swizzled = class_getInstanceMethod(self, @selector(swizzled_AudioSessionAddPropertyListener:selector:name:object:));

    method_exchangeImplementations(original, swizzled);
}

-(void) swizzled_AudioSessionAddPropertyListener:selector:name:object:
{
    if(//funciton object I don't like)
    {
        return;
    }
    else
    {
        // Calls the original addObserver function
        [self swizzled_AudioSessionAddPropertyListener::notificationObserver selector:notificationSelector name:notificationName object:notificationSender];
    }
}

1 个答案:

答案 0 :(得分:3)

AudioSessionAddPropertyListener()是C函数,而不是Objective-C方法。你不能调侃它。

(即使你可以调整它,这几乎肯定是一个坏主意。)