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에 따라 라이센스가 부여됩니다.