Objective-C 신규 정보kindof 키워드

2836 단어
Objective-C는 Xcode 7의 업그레이드에 따라 많은 새로운 특성을 가져왔다. 물론 이번 업데이트에서 가장 큰 것은 Objective-C의 경량급 범주를 도입한 것이다. 정확히 말하면 Objective-C류의 경량급 범주이다.이외에 또 하나의 작은 특성은 이다kindof 키워드 도입
일부 기술 웹 사이트에서kindof는 일반적으로 범주에 사용됩니다. 예를 들어 NSArray은(는) 이 NSArray 객체에 UIView 객체 또는 UIView 하위 클래스 객체가 저장되어 있음을 나타냅니다.그러나 Objective-C는 원래 동적 형식이고 컴파일러도 컴파일할 때 형식이 일치하기 때문에 NSArray를 사용해도 이 그룹에 UIScrollView의 대상을 저장할 수 있으며 컴파일 경고도 없고 오류도 발생하지 않습니다.그럼 이거kindof가 무슨 소용이 있을까요?
__kindof  class_name 본뜻은 이 종류를class 로 지정하는 것입니다name 또는 classname의 하위 클래스, 컴파일러에게 둘 다 어울릴 수 있음을 알려 줍니다.현재 컴파일러 형식 검사가 일치하는 경우 C11 표준의 범용과 결합하여 사용하는 경우가 있습니다!C11의generic selection 표현식의 형식 일치는 컴파일러가 컴파일할 때 일치하기 때문에 실행할 때의 동작이 없습니다. (예를 들어 int[n] 형식이 아닌 경우)kindof class_name 형식으로 더 넓은 범위의 유형을 일치시킵니다.다음 코드는 다음과 같습니다.
@interface MyObject : NSObject

@end


@implementation MyObject

@end


@implementation ViewController

- (void)viewDidLoad {
    MyObject *obj = [[MyObject alloc] init];

    int x = _Generic(obj, int:0, NSString*:1, NSObject*:2, default:-1);
    NSLog(@"x1 = %d", x);
    
    x = _Generic(obj, int:0, float:1, __kindof NSObject*:2, default:-1);
    NSLog(@"x2 = %d", x);

    [obj release];
}

@end

컴파일러가 컴파일할 때 검사를 하기 때문에 여기 두 번째Generic에서는 NSString*을 사용할 수 없습니다. 그렇지 않으면 컴파일러는 NSString*와 를kindof NSObject* 둘 다 호환되는 유형이므로 일치 오류가 발생합니다.

좋은 웹페이지 즐겨찾기