Objective-C에서 id와 instancetype의 차이

1448 단어

개요


instancetype은clang3.5에서 제공하는 키입니다. id와 같이 알 수 없는 형식의 Objective-C 대상을 되돌려주는 방법을 표시합니다.

2 관련 반환 형식과 비관련 반환 형식


1, 연결 반환 유형


코코아의 명명 규칙에 따라 다음 스타일에 맞는 방법:
  • 류 방법 중,alloc,new로 시작
  • 실례적인 방법에서 init,autorelease,retain,self로 시작하면 이 방법이 있는 유형의 대상을 되돌려줍니다. 이런 방법은 관련 귀환 유형 방법입니다.즉 이러한 방법이 되돌아오는 결과는 방법이 있는 클래스를 유형으로 한다.
  • @interface NSObject
    + (instancetype)alloc
    - (instancetype)init
    

    다음과 같은 방법으로 초기화할 때
    NSArray *array = [[NSArray alloc] init];
    

    Cocoa의 명명 규칙에 따라 [NSArray alloc]와 [NSArray alloc] init]가 모두 NSArray의 객체로 반환됩니다.

    2, 비연관 반환 유형


    연관 반환 유형의 몇 가지 방법을 제외하고는 모두 비연관적이다.
    @interface NSArray  
    + (id)constructAnArray; 
    + (instancetype)constructAnArray;
    @end
    

    이러한 방법으로 NSAarry를 초기화할 경우: [NSArray constructAnArray];
  • 귀환 형식이 id라면 귀환 대상이 어떤 유형인지 확실하지 않음
  • instancetype이면 반환 대상 유형이 NSArray* instancetype으로 확정된 가장 큰 특징은 비연관 반환 유형의 방법을 해당 유형의 유형으로 되돌리는 것이다
  • 세 가지 사용 차이점

  • id는 컴파일할 때 대상의 실제 유형을 판단할 수 없음instancetype은 컴파일할 때 대상의 실제 유형을 판단할 수 있음
  • init 방법의 반환값이 instance type이면 반환값을 다른 유형의 대상에게 부여하면 경고를 보냅니다. 만약 이전이라면 init의 반환값이 id였다면 init가 되돌아오는 대상 주소를 다른 대상에게 부여하는 것은 틀리지 않을 것입니다
  • id는 변수를 정의할 수 있고 반환값으로 사용할 수 있으며 인삼 instancetype은 반환값으로만 사용할 수 있다
  • 네 가지 총결산


    우리가 구조 방법을 사용자 정의할 때, 되돌아오는 값은 가능한 instancetype을 쓰고, id를 사용하지 마십시오

    좋은 웹페이지 즐겨찾기