iOS[OC] 기본편의 instancetype과 id 차이
一、关联返回类型(related result types)
코코아의 명칭 규칙에 따라 다음과 같은 규칙을 만족시키는 방법: 1. 클래스 방법에서alloc 또는 new로 시작하여 2. 실례적인 방법에서autorelease, init,retain 또는self로 시작하면 하나의 방법이 있는 클래스 유형의 대상을 되돌려준다. 이런 방법들은 관련 클래스로 돌아가는 방법이라고 부른다.다시 말하면 이러한 방법의 반환 결과는 방법이 있는 종류를 유형으로 하고 말하기가 좀 까다롭다. 아래의 예를 보십시오.
@interface NSObject
+ (id)alloc;
- (id)init;
@end
@interface NSArray : NSObject
@end
NSArray를 다음과 같이 초기화할 때
NSArray *array = [[NSArray alloc] init];
코코아의 명명 규칙에 따르면 문장 [NSArray alloc]의 유형은 NSArray입니다. 왜냐하면 alloc의 반환 유형은 관련 반환 유형에 속하기 때문입니다.마찬가지로 [NSArray alloc] init]의 반환 결과도 NSArray입니다.
2. instancetype 작용
1. 역할
연관 반환 유형이 아닌 방법은 다음과 같습니다.
@interface NSArray
+ (id)constructAnArray;
@end
NSArray를 다음과 같이 초기화할 때
[NSArray constructAnArray];
코코아의 방법 명명 규범에 따라 되돌아오는 형식은 방법이 설명하는 되돌아오는 형식과 같이 id입니다.그러나 instancetype을 반환 유형으로 사용하는 경우 다음과 같습니다.
@interface NSArray
+ (instancetype)constructAnArray;
@end
동일한 방식으로 NSArray를 초기화하는 경우
[NSArray constructAnArray];
반환 유형은 NSArray*
총괄적으로 말하면 instance type의 역할은 비연관 귀환 유형의 방법으로 해당 유형의 유형을 귀환시키는 것이다!
2. 이점
대상의 유형을 정할 수 있고 컴파일러가 우리의 코드 작성 문제를 더욱 잘 파악할 수 있도록 도와줄 수 있다. 예를 들어 다음과 같다.
[[[NSArray alloc] init] mediaPlaybackAllowsAirPlay]; // "No visible @interface for `NSArray` declares the selector `mediaPlaybackAllowsAirPlay`"
[[NSArray array] mediaPlaybackAllowsAirPlay]; // (No error)
상례의 첫 번째 행 코드는 [[NSArray alloc] init]의 결과가 NSArray*이기 때문에 컴파일러는 되돌아오는 데이터 형식에 따라 NSArray가 미디어플레이백 AllowsAirPlay 방법을 실현하는지 확인할 수 있다.개발자가 컴파일 단계에서 오류를 발견하는 데 유리하다.두 번째 줄 코드는 array가 관련 반환 유형 방법에 속하지 않기 때문에 [NSArray array]는 id 유형을 반환한다. 컴파일러는 id 유형의 대상이 미디어플레이백 Allows AirPlay 방법을 실현했는지 모르고 개발자를 대신해서 오류를 신속하게 발견하지 못한다.
3. instancetype과 id의 공통점과 차이점
1. 공통점
모두 방법으로 되돌아갈 수 있는 유형
2. 차이점
(1)instancetype은 방법이 있는 클래스와 같은 유형의 대상을 되돌릴 수 있고 id는 미지의 유형의 대상만 되돌릴 수 있다.(2) instancetype은 반환값으로만 사용할 수 있고 id처럼 매개 변수로 사용할 수 없습니다. 예를 들어 아래의 쓰기 방법:
//err,expected a type
- (void)setValue:(instancetype)value
{
//do something
}
틀린 것이니 다음과 같이 써야 한다.
- (void)setValue:(id)value
{
//do something
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.