iOS 에서 id 유형의 이해 및 바 텀 원리 에 대한 상세 한 설명

머리말
id:데이터 형식 입 니 다.
id 형식 은 대상 을 가리 키 는 지침 으로 정의 되 어 있 습 니 다.이것 은 id 의 정의 에서 볼 수 있 습 니 다.id 는 obbc.h 에서 다음 과 같이 정의 합 니 다.

typedef struct objc_object {
 Class isa;
} *id;
id 는 비교적 유연 한 대상 지침 이 고 Object(또는 NSObject)류 를 계승 하 는 모든 대상 을 가리 키 는 대상 입 니 다.코코아 의 개발 환경 에서 NSObject 는 모든 종류의 뿌리 이다.그래서 id 는 모든 cocoa 의 합 법 적 인 대상 을 가리 킬 수 있 습 니 다.
Objective-C 의 id 라 는 데이터 형식 에 존재 하 는 가 치 는 무엇 입 니까?
  • id 는 통용 되 는 대상 유형 으로 그 어떠한 대상 에 도 클래스 로 저장 할 수 있 으 며 만능 지침 으로 이해 할 수 있다
  • **id 의 정의 에서*번 을 포 장 했 고 id 지침 은 os 의 대상 만 가리킨다NSObject 와 id 는 모든 대상 을 가리 킬 수 있 습 니 다
  • NSObject 대상 이 놀 라 서 컴 파일 할 때 검사(강제 형식 변환 필요)
  • id 는 강제 형식 전환 이 필요 하지 않 습 니 다.id 는 직접 사용 할 수 있 습 니 다
  • 컴 파일 러 는 id 를 본 후에 동적 유형 이 라 고 생각 하고 검사 유형 이 아 닙 니 다
  • id 형식:
    id 는 데이터 형식 이 며 동적 데이터 형식 입 니 다.
    데이터 형식 이 니 사용 할 수 있 습 니 다.
    1.변수 정의
    2.함수 로 서 의 매개 변수
    3.함수 로 서 의 반환 값
    4、id == NSObject *   만능 지침
    id 와 NSObject*의 차이 점:
    NSObject*는 정적 데이터 형식 입 니 다.
    id  동적 데이터 형식 입 니 다.
    기본 적 인 상황 에서 모든 데이터 형식 은 정적 데이터 형식 입 니 다.
    정적 데이터 형식의 특징:
    1.컴 파일 할 때 변수의 유형 을 알 수 있 습 니 다.
    2.변수 에 어떤 속성 과 방법 이 있 는 지 알 고 있 습 니 다.
    3.컴 파일 할 때 이 속성 과 방법 에 접근 할 수 있 습 니 다. 
    4.정적 데이터 형식 을 통 해 변 수 를 정의 하 는 경우 정적 데이터 형식 에 속 하 는 속성 과 방법 에 접근 하지 못 하면 컴 파일 러 가 잘못 보고 합 니 다.
    동적 데이터 형식의 특징:
    1.컴 파일 할 때 컴 파일 러 는 변수의 실제 유형 을 모 르 고 실행 할 때 만 실제 유형 을 알 수 있 습 니 다.
    2.동적 데이터 형식 으로 변 수 를 정의 하면 동적 데이터 형식 에 속 하지 않 는 속성 과 방법 에 접근 하면 컴 파일 러 가 잘못 보고 하지 않 습 니 다.
    정적 데이터 형식 을 통 해 변 수 를 정의 합 니 다.하위 클래스 특유 의 방법 을 호출 할 수 없습니다.
    동적 데이터 형식 으로 변 수 를 정의 하면 하위 클래스 특유 의 방법 을 호출 할 수 있 습 니 다.
    동적 데이터 형식 으로 정 의 된 변 수 를 통 해 개인 적 인 방법 을 호출 할 수 있 습 니 다.
    단점:동적 데이터 형식 은 임의의 방법 을 호출 할 수 있 기 때문에 자신 에 게 속 하지 않 는 방법 으로 호출 될 수 있 고 컴 파일 할 때 오류 가 발생 하지 않 기 때문에 실행 시의 오 류 를 초래 할 수 있 습 니 다.
    응용 장면:다 중,코드 양 을 줄 일 수 있 고 하위 클래스 특유 의 방법 을 호출 하지 않 으 려 면 강제 유형 전환 이 필요 합 니 다.
    동적 데이터 형식 으로 인 한 운행 시 오 류 를 피하 기 위해 일반적인 상황 에서 동적 데이터 형식 으로 변 수 를 정의 하면 이 대상 을 호출 하 는 방법 전에 현재 대상 이 이 방법 을 호출 할 수 있 는 지 판단 합 니 다.
    instancetype 과 id 의 차이 점:
    1.instancetype=id==만능 포인터==한 대상 을 가리킨다
    2.id 는 컴 파일 할 때 대상 의 실제 유형 을 판단 할 수 없습니다.
    3.instancetype 은 컴 파일 할 때 대상 의 실제 유형 을 판단 할 수 있 습 니 다.(하 나 는 컴 파일 할 때 실제 유형 을 모 르 고 하 나 는 컴 파일 할 때 실제 유형 을 알 수 있 습 니 다)
    4.id 는 변 수 를 정의 할 수 있 고 반환 값 으로 할 수 있 으 며 형 삼 으로 할 수 있 습 니 다.
    5.instancetype 은 반환 값 으로 만 사용 할 수 있 습 니 다.유형 검 사 를 합 니 다.만 든 대상 이 상 관 없 는 대상 에 게 경고 메 시 지 를 부여 하면 오류 가 발생 하지 않도록 합 니 다.
    메모:이후 에 사용자 정의 구조 방법 만 있 으 면 반환 값 은 인 스 턴 스 type 을 사용 하고 id 를 사용 하지 마 십시오.
    총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 iOS 개발 자 여러분 에 게 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기