instancesRespondToSelector VS respondsToSelector

2208 단어

두 가지 방법은 모두 대상(클래스도 대상에 속함)이 어떤 방법에 응답하는지 판단하는 데 쓰인다.


두 가지 방법에 대한 설명:
@protocol NSObject
- (BOOL)respondsToSelector:(SEL)aSelector;
@end

@interface NSObject  
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
@end

먼저 요약해 보겠습니다.
  • 응답 실례 방법
  • 클래스respondsToSelector는 실례적인 방법에 응답할 수 없습니다.
  • 류instancesRespondToSelector는 실례적인 방법에 응답할 수 있습니다.
  • 실례respondsToSelector는 실례 방법에 응답할 수 있습니다.
  • 응답 클래스 방법
  • 클래스respondsToSelector 응답 클래스 방법.
  • 클래스 instances RespondToSelector는 클래스 방법에 응답할 수 없습니다.
  • 실례respondsToSelector는 클래스 방법에 응답할 수 없습니다.

  • 테스트 코드는 다음과 같습니다.
        [self compareRespondMethod:[UIView class] selctor:@selector(backgroundColor)];
        [self compareRespondMethod:self.view selctor:@selector(backgroundColor)];
        [self compareRespondMethod:[UIView class] selctor:@selector(layerClass)];
        [self compareRespondMethod:self.view selctor:@selector(layerClass)];
    
    - (void)compareRespondMethod:(id)object selctor:(SEL)selctor{
        BOOL isClassRespond = NO,isInstanceRespond = NO;
        if ([object isKindOfClass:[UIView class]]) {
            if ([object respondsToSelector:selctor]) {
                isInstanceRespond = YES;
            }
            NSLog(@"instance respondsToSelector %@ ",isInstanceRespond?@"YES":@"NO");
        }else{
            if ([object respondsToSelector:selctor]) {
                isClassRespond = YES;
            }
            if ([object instancesRespondToSelector:selctor]) {
                isInstanceRespond = YES;
            }
            NSLog(@"class respondsToSelector %@ 
    class instancesRespondToSelector %@",isClassRespond?@"YES":@"NO",isInstanceRespond?@"YES":@"NO"); } }

    테스트 결과 인스턴스 방법 테스트 결과:
    class respondsToSelector NO
    class instancesRespondToSelector YES
    instance respondsToSelector YES 
    

    클래스 메소드 테스트 결과:
    class respondsToSelector YES 
    class instancesRespondToSelector NO
    instance respondsToSelector NO 
    

    다시 한 번 돌이켜 보면 총결산을 이해할 수 있을 것이다.ps: 본고는 분류 중의 실례 방법과 분류 방법을 언급하지 않기 때문에 스스로 테스트할 필요가 있다.

    좋은 웹페이지 즐겨찾기