, id
을 반환하는 방법은 암시 적으로는 new
또는 alloc
, 또는 retain
, autorelease
, init
, 또는 self
로 시작하는 인스턴스 메소드로 시작하는 클래스 메소드 인 경우 instancetype
를 반환하는 것으로 알려져있다.instancetype을 alloc/new/init 메소드에서 사용해야합니까? <a href="http://clang.llvm.org/docs/LanguageExtensions.html#objective-c-features" rel="noreferrer" title="clang documentation">clang documentation</a>에 따르면
일관성을 유지하기 위해 새 코드에서 instancetype
을 명시 적으로 반환하도록 작성해야합니까?
- (instancetype)init {
self = [super init];
if (self) {
// perform initialization
}
return self;
}
이유가 무엇인지, 왜 그렇지 않은지, 추론하는 문서가 있습니까? 이 경우 컴파일러와 완전히 똑같은 것으로 해석됩니다.
기본값은 "id"이며 instancetype은 아닙니다. instancetype을 반환하면 더 많은 유형을 검사 할 수 있습니다. 코드가 정확하다면 차이가 없지만, id를 반환하면 컴파일러가 실수를 놓칠 수 있습니다. – gnasher729
@ gnasher729 llvm (http://clang.llvm.org/docs/LanguageExtensions.html)의 instancetype 설명서를 참조하십시오. 'instancetype'은 특정 메소드에 대해 자동으로 유추되며, 결과적으로'instancetype'가 기본값으로 사용됩니다. – bbum