Effective OC 제1 4 조: '클래스 대상' 의 의 도 를 이해

1626 단어
클래스 대상
  • OC 대상 이 사용 하 는 데이터 구조 정의:
  • typedef struct objc_object{
        Class isa;  //=>         
    } *id;
    

    Class 자체 도 대상 입 니 다. 데이터 구조:
      typedef struct objc_class *Class;
      struct objc_class {
        Class isa;  //   (      )      
        Class super_class;  //  
        const char *name;
        ...
    //            ,            
      struct objc_ivar_list *ivars;
      struct objc_method _list **methodLists;
      struct objc_cache *cache;
      struct objc_protocol_list *protocols;
      }
    

    메타 데이터
    각 클래스 는 하나의 클래스 대상 만 있 고, 클래스 대상 은 하나의 예 이다.
    super_class 지침 은 계승 관 계 를 확정 하 였 으 며, isa 지침 은 인 스 턴 스 가 속 한 클래스 가 이러한 관 계 를 통 해 [유형 정보 조회] 를 실행 할 수 있 습 니 다. 대상 이 특정한 선택 자 에 응답 할 수 있 는 지, 특정한 협 의 를 따 를 수 있 는 지 확인 할 수 있 습 니 다.
    클래스 계승 체 에서 유형 정 보 를 조회 합 니 다.
    유형 정보 조회 방법 으로 클래스 계승 체 계 를 검사 합 니 다.
  • isMemberOfClass: 이 대상 이 특정한 유형의 인 스 턴 스 인지 아 닌 지 판단 할 수 있 습 니 다
  • isKindOfClass: 대상 이 특정한 종류 또는 파생 류 인지 판단 할 수 있 는 인 스 턴 스
  • 검색 은 isa 포인터 로 대상 이 속 한 종 류 를 찾 습 니 다. 슈퍼class 계승 시스템 에서 하나씩 찾 습 니 다.
    두 종류의 대상 이 같 는 지 비교 하 다
    클래스 대상 이 하나의 예 이기 때문에 전체 응용 프로그램 에서 각 클래스 의 대상 은 하나 밖 에 없습니다. 대상 이 특정한 인 스 턴 스 인지 판단 합 니 다.
    id object = ...;
    if ([object class] == [EocSomeClass class]){
    
    }
    

    이렇게 판단 한 후에 도 메 시 지 를 처리 하지 마 세 요. object 는 다른 대상 이 모든 선택 자 를 전달 한 수용 대상 일 수 있 기 때 문 입 니 다.
    요점
  • 모든 인 스 턴 스 는 클 라 스 대상 을 가리 키 는 지침 으로 유형 을 나타 내 고 이 클 라 스 대상 은 클래스 의 계승 시스템
  • 을 구성 했다.
  • 대상 유형 이 컴 파일 되 지 않 으 면 유형 정보 조회 방법 으로 알 아 봐 야 한다
  • 유형 정보 조회 방법 으로 대상 의 유형 을 확정 하고 유형 대상 을 직접 비교 하지 마라. 왜냐하면 일부 대상 이 메시지 전달 기능
  • 을 실현 할 수 있 기 때문이다.

    좋은 웹페이지 즐겨찾기