2013-09-25 7 views
1

내 프로젝트에 오디오 속성 리스너를 추가하는 라이브러리가 있습니다. 그렇게 할 수 없도록 차단할 수 있어야하지만 소스 코드가 없습니다.AudioSessionAddPropertyListener를 swizzle하는 방법

나는 NSNotificationCenter에서 addObserver 메소드를 사용하기 전에 미리 살펴 봤다. AudioSessionAddPropertyListener에 대해 동일한 작업을 수행하도록 도와 줄 수 있습니까? 통화에 추가하려는 메소드가 내 화이트리스트와 일치하지 않으면 차단하려고합니다. 그렇지 않으면 원래 메서드를 호출합니다.

로드 기능을 어떤 클래스에 과부하해야하는지 알지 못합니다. 나는 Audio.h를보고 있습니다. 나는 pseudo/real/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]; 
    } 
} 

답변

3

AudioSessionAddPropertyListener()은 Objective-C 방법이 아닌 C 함수입니다. 너는 그것을 뒤죽박칠 할 수 없다.

는 잘 나쁜 생각되지 않을 것

+0

앗의 터무니없는 (당신이 그것을 스위 즐링 (swizzle) 수있다하더라도, 그것은 거의 확실. 나쁜 생각 것),하지만 난 그것을 할 수없는 것을 알 수있다. – Gandalf458