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