2012-03-02 2 views
1

Objective-C에서 파일 .h에 인스턴스 변수를 넣는 것과 파일을 .m에 넣는 것의 실제 차이점은 무엇입니까? 최종 결과가 다른가요? 어떤 특별한 메커니즘이이를 허용합니까? 이것이 Objective-C에서 어떻게 가능합니까? C++에서 어떻게 가능하지 않습니까?구현 파일의 인스턴스 변수 - 비공개 대 보호

인스턴스 변수를 .m 파일에 넣는 스타일을 채택하면이 인스턴스는 개인 인스턴스 변수에만 적합합니다. 맞습니까? 내 보호 된 인스턴스 변수를 항상 .h 개의 파일에 두어 하위 클래스에 의해 올바르게 상속받을 수 있도록해야합니까? 아니면 .m 파일의 보호받는 ivars를 어떻게 든 상속받을 수있는 방법이 있습니까?

답변

2

추가 인스턴스 변수를 class extensions에 넣는 것은 Clang/LLVM 2.0 이전에는 불가능했습니다. Objective C 컴파일러는 클래스의 ivars를 헤더 및 클래스 확장의 정의에서 "어셈블"하여 최종 레이아웃에 도착합니다.

클래스 확장은 Objective-C의 비교적 새로운 언어 기능이기 때문에 C++와 같은 다른 언어에서의 부재는 놀랄 일이 아닙니다. C#과 같은 다른 언어는 부분 클래스로 비슷한 기능을 구현할 수 있습니다.

두 번째 부분은 정확합니다. 전용 인스턴스 변수 및 속성 만 클래스 확장에 사용하기에 적합합니다. 물론 공개 인스턴스 변수는 .h 파일에 있어야합니다.