Objective-C의 instancetype 및 id 키워드
1.instancetype이란?
instancetype은 clang 3.5에서 시작합니다. clang이 제공하는 키워드는 어떤 방법이 되돌아오는 알 수 없는 형식의 Objective-C 대상을 표시합니다.알 수 없는 유형의 대상은 id 키워드로 표시할 수 있다는 것을 알고 있습니다. 그런데 왜 instance type이 하나 더 있습니까?
2. 연결 반환 유형(related result types)
Cocoa의 명명 규칙에 따라 다음 규칙을 충족합니다.
alloc
또는 new
로 시작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*
였다.3. instancetype 역할
3.1 역할
연관 반환 유형이 아닌 방법은 다음과 같습니다.
@interface NSArray
+ (id)constructAnArray;
@end
NSArray를 다음과 같이 초기화할 때
[NSArray constructAnArray];
코코아의 방법명명명규범에 따르면 반환 유형은 방법성명의 반환 유형과 같다
id
.그러나 instancetype
를 반환 유형으로 사용하는 경우 다음과 같습니다.@interface NSArray
+ (instancetype)constructAnArray;
@end
동일한 방식으로 NSArray를 초기화하는 경우
[NSArray constructAnArray];
얻은 반환 유형과 방법이 있는 유형의 유형은 같다
NSArray*
!총괄적으로 말하자면instancetype
의 역할은 바로 비연관 귀환 유형의 방법을 해당 유형의 유형으로 귀환시키는 것이다!3.2 이점
대상의 유형을 정할 수 있고 컴파일러가 우리의 코드 작성 문제를 더욱 잘 파악할 수 있도록 도와줄 수 있다. 예를 들어 다음과 같다.
[[[NSArray alloc] init] mediaPlaybackAllowsAirPlay]; // "No visible @interface for `NSArray` declares the selector `mediaPlaybackAllowsAirPlay`"
[[NSArray array] mediaPlaybackAllowsAirPlay]; // (No error)
상례에서 첫 번째 줄 코드는
[[NSArray alloc] init]
의 결과NSArray*
였기 때문에 컴파일러는 되돌아오는 데이터 형식에 따라 NSArray
의 실현 여부mediaPlaybackAllowsAirPlay
방법을 검출할 수 있다.개발자가 컴파일 단계에서 오류를 발견하는 데 유리하다.두 번째 줄 코드는 array
가 관련 반환 유형 방법에 속하지 않기 때문에 [NSArray array]
반환된 것은 id
유형이고 컴파일러는 id
유형의 대상이 실현되었는지 mediaPlaybackAllowsAirPlay
방법을 모르기 때문에 개발자를 대신해서 오류를 신속하게 발견할 수 없다.4. instancetype과 id의 공통점
。
instancetype
는 방법이 있는 클래스와 같은 유형의 대상을 되돌릴 수 있고id
는 미지의 유형의 대상만 되돌릴 수 있다.instancetype
는 반환값으로만 사용할 수 있고 id
처럼 매개 변수로 사용할 수 없다. 예를 들어 아래의 문법: //err,expected a type
- (void)setValue:(instancetype)value
{
//do something
}
틀린 것이니 다음과 같이 써야 한다.
- (void)setValue:(id)value
{
//do something
}
출처: Objective-C의 instancetype 및 id 키워드
영문 링크: 1.http://clang.llvm.org/docs/LanguageExtensions.html#objective-c-features 2. http://nshipster.com/instancetype/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.