잘 작동하는 알림 문제에 대한 해결책이 있지만 나쁜 생각 일 수 있습니다.Objective-C에서 같은 이름의 클래스 메서드 및 인스턴스 메서드
클래스의 각 인스턴스와 클래스 자체에서 처리해야하는 알림이 있습니다. 이를 처리하기 위해 클래스의 클래스와 인스턴스에 대한 알림을 등록합니다. 그것이 정확히 동일한 알림이기 때문에 클래스와 인스턴스 메소드를 동일하게 명명했습니다. 이것은 통지 핸들러의 이름 지정 방법에 대해 설정 한 표준을 따릅니다.
이것은 나쁜 생각입니까? 거기에 숨겨진 일부 숨겨진 된 got'ca 있나요? 미래 개발자들에게 혼란을 일으킬 수 있습니까?
+ (void)initialize
{
if (self == [SICOHTTPClient class]) {
[[self notificationCenter] addObserver:self
selector:@selector(authorizationDidChangeNotification:)
name:SICOJSONRequestOperationAuthorizationDidChangeNotification
object:nil];
}
}
- (id)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if (self) {
self.parameterEncoding = AFJSONParameterEncoding;
[self registerHTTPOperationClass:[SICOJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
if ([[self class] defaultAuthorization])
[self setDefaultHeader:@"Authorization" value:[[self class] defaultAuthorization]];
[[[self class] notificationCenter] addObserver:self
selector:@selector(authorizationDidChangeNotification:)
name:SICOJSONRequestOperationAuthorizationDidChangeNotification
object:nil];
}
return self;
}
- (void)dealloc
{
[[[self class] notificationCenter] removeObserver:self
name:SICOJSONRequestOperationAuthorizationDidChangeNotification
object:nil];
}
#pragma mark Notifications
- (void)authorizationDidChangeNotification:(NSNotification *)notification
{
NSString *authorization = notification.userInfo[SICOJSONRequestOperationAuthorizationKey];
if ([authorization isKindOfClass:[NSString class]]) {
[self setDefaultHeader:@"Authorization" value:authorization];
} else {
[self clearAuthorizationHeader];
}
}
+ (void)authorizationDidChangeNotification:(NSNotification *)notification
{
NSString *authorization = notification.userInfo[SICOJSONRequestOperationAuthorizationKey];
if ([authorization isKindOfClass:[NSString class]]) {
[self setDefaultAuthorization:authorization];
} else {
[self setDefaultAuthorization:nil];
}
}
슈퍼 질문. 나는 천 점이 없지만, 필요와 구현이 매우 다르므로 인스턴스와 클래스 방법이 충돌하지 않는다고 말할 수 있습니다. –