1

私のプロジェクトには、オーディオ プロパティ リスナーを追加するライブラリがあります。私は本当にそれをブロックできるようにする必要がありますが、ソースコードがありません.

以前、NSNotificationCenter の addObserver メソッドのスウィズルを行ったことがあります。AudioSessionAddPropertyListener についても同じことを行うのを手伝ってもらえますか? 呼び出しに追加しようとしているメソッドがホワイトリストと一致しない場合、それをブロックしたいと考えています。それ以外の場合は、元のメソッドを呼び出します。

load 関数をオーバーロードする必要があるクラスがわかりません。Audio.h の中を見ています。私がやろうとしていることを見ることができるように、いくつかの疑似/本物/badlyNamed コードを追加しています。

#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];
    }
}
4

1 に答える 1

3

AudioSessionAddPropertyListener()Objective-C メソッドではなく、C 関数です。あなたはそれをスウィズルすることはできません。

(スウィズルできたとしても、それはほぼ間違いなく悪い考えです。)

于 2013-09-25T04:02:36.770 に答える