4

Objective-C에서 @private, @protected 등과 같이 인스턴스 변수에 대한 액세스 제어가 어떻게 구현되는지 궁금합니다.@private는 어떻게 구현됩니까?

내가 별도의 구조물이 같은 몇 가지 방법으로 생성되고 있다고 생각했다 :

struct Class_Foo_Protected { 
    int bar; 
}; 

struct Class_Foo_Private { 
    int baz; 
}; 

struct Class_Foo_Public { 
    int qux; 
}; 

하지만 난 정말 아무 생각의 라인을 따라

@interface Foo { 
    int bar; 
    @private 
    int baz; 
    @public 
    int qux; 
} 

=> 뭔가. 누구나 이것이 어떻게 실제로 이루어 졌는지 알 수 있습니까?

답변

7

이러한 수정자는 클래스의 메모리 레이아웃에 대해 아무 것도 변경하지 않습니다. 컴파일러 자체는 어떤 ivar가 public, protected 또는 private인지를 기억하고 부적절한 곳에서 액세스하려고하면 오류를 내 보냅니다. 이것은 모든 코드가 생성되기 전에 완료되며 생성 된 코드에 영향을 미치지 않습니다.

+0

매우 흥미 롭습니다. 감사합니다. –

+5

명확히하기 위해 런타임 메서드를 사용하여 클래스의 모든 ivar에 액세스 할 수 있으며 아무 것도 당신을 멈추게 할 수는 없습니다 (이 작업을 수행하는 일반적인 로터리 특성 제외). '@ private'은 순전히 컴파일러를위한 메타 데이터이며, 그 이상은 없습니다. –