2012-06-10 2 views
1

메모리 부족 경고에 응답 할 수있는 "정적"유사 클래스가 있습니다. 그러나 시뮬레이터에서 수동으로 낮은 메모리 경고를 트리거 할 때 "인식 할 수없는 선택기"오류가 발생합니다."인식 할 수없는 선택기"UIApplicationDidReceiveMemoryWarningNotification을 청취하려고 시도 할 때

관련 코드 :

@interface MyClass : NSObject 
+ (void) receiveNotification:(NSNotification*) notification; 
@end 

@implementation MyClass 
+ (void) initialize { 
    [super initialize]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification) name:@"UIApplicationDidReceiveMemoryWarningNotification" object:nil]; 
} 
+ (void) receiveNotification:(NSNotification*) notification { 
    // Breakpoint here never hits. 
    // I instead receive error "+[MyClass receiveNotification]: unrecognized selector sent to class". 
} 
@end 

답변

2

귀하의 방법 이름 receiveNotification:

그래서 셀렉터 @selector(receiveNotification:)

편집해야합니다 (콜론은 이름의 일부입니다주의) : 또한, BTW, I 클래스 이니셜 라이저에서 [super initialize]를 호출하지 않습니다. 마찬가지로, 작성한 이니셜 라이저가 두 번 호출되도록 하위 클래스를 보호해야합니다. 자세한 내용은 Mike Ash의 다음 게시물을 참조하십시오. class loading and initialization

나는 도움이되기를 바랍니다.

+0

아. 그랬어. 이상하게도 - 왜 실수를 저지를만한 컴파일 타임 오류가 없습니까? – DuckMaestro

+2

컴파일러는 @selector (receiveNotification)가 원하는 것이 아니라는 것을 알 수 없으므로. 선택자는 특정 클래스에 묶여 있지 않으므로 알고있는 한 다른 클래스가이를 구현할 수 있습니다. 또는 클래스가 다른 컴파일 단위에서이를 구현하거나 런타임에 해당 메서드를 추가 할 수도 있습니다. 또한 컴파일러는'-addObserver : selector : name : object :'에 전달 된 옵저버가 selector 인자를 구현한다고 가정 할 수 없다는 것을 알 수 없다. Objective-C는 컴파일러에게 그 관계에 대해 알릴 방법을 제공하지 않는다. –