7

잘 작동하는 알림 문제에 대한 해결책이 있지만 나쁜 생각 일 수 있습니다.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]; 
    } 
} 
+1

슈퍼 질문. 나는 천 점이 없지만, 필요와 구현이 매우 다르므로 인스턴스와 클래스 방법이 충돌하지 않는다고 말할 수 있습니다. –

답변

3

이것은 코드 주석이 클래스 메소드와 같은 이름을 가진 인스턴스 메소드와 목표 C에서 아무 문제 없습니다 :)

위한 것입니다.

내가 제안 중 하나를 것입니다 :

  • 이 처리 (다음 다른 적절라는 이름의 방법으로 클래스 통지를 처리)하는 알림 메서드 이름 스펙을 수정하거나

  • 는 적절한 코멘트를 추가 미래에 혼란 스러울 수있는 개발자를 위해 무엇이 일어나고 있는지 설명하십시오.

+0

당신이 옳다고 생각합니다. 코멘트는 미래의 개발자가 인스턴스/클래스 메소드의 요점을 알 수있을만큼 충분할 것입니다. 귀하의 의견을 보내 주셔서 감사합니다. –

1

언어 자체와 런타임은 당신이하는 일에 모호함이 없습니다. 그래서 당신은 그 앞에서 안전합니다.

미래의 유지 관리자를 혼란스럽게 생각한다면 수동 전화를 걸려는 방법이 아니기 때문에 어리석은 자동 완성 오류에 너무 신경 쓸 필요가 없다고 생각합니다.

그렇다고해서 수업 자료를 인공 카테고리로 옮기고 싶습니다. 이는 페이지를 분리 할뿐만 아니라 클래스가 인스턴스 응답과는 별도의 기능 트렌치로 응답하려고한다는 것을 명시합니다.

관련 문제