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 는 데이터 형식 이 며 동적 데이터 형식 입 니 다.
데이터 형식 이 니 사용 할 수 있 습 니 다.
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 개발 자 여러분 에 게 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.