Swift로 몇 가지 isa를 테스트 한 결과 NSObject가 수퍼 클래스 (직접 또는 더 높은 수준)이거나 '@objc'장식을 사용하는 경우에만 작동한다는 것을 발견했습니다. 그렇지 않으면 C ++와 같은 static- 및 vtable-dispatch 스타일을 따릅니다.
Cocoa / NSObject 기본 클래스없이 Swift 클래스를 정의하는 것이 정상입니까? 내가 염려된다면 이것은 메소드 인터 셉션 및 런타임 인트로 스펙 션과 같은 Objective-C의 역 동성을 훨씬 앞선 것을 의미합니다.
동적 런타임 동작은 속성 관찰자, 핵심 데이터, 측면 지향 프로그래밍 , 고차원 메시징 , 분석 및 로깅 프레임 워크 등과 같은 기능의 핵심 입니다.
Objective-C의 메서드 호출 스타일을 사용하면 메서드 호출에 약 20 개의 기계 코드 피연산자가 추가되므로 특정 상황에서 ( 작은 본문이있는 메서드에 대한 많은 엄격한 호출 ) C ++ 스타일 정적 및 vtable 디스패치가 더 잘 수행 될 수 있습니다.
그러나 일반적인 95-5 규칙 ( 95 %의 성능 향상은 코드의 5 % 조정에서 비롯됨)을 고려할 때 강력한 동적 기능으로 시작하여 필요한 경우 강화하는 것이 합리적이지 않습니까?