[Objective C] Protocol Object

프로그래밍/iPhone Dev 2009. 11. 26. 16:41 Posted by galad
Protocol Object

- runtime시에 protocol이 어떻게 표현되는지에 대해서 알아보자. 클래스는 class object로, 함수는 selector로 runtime시에 나타나듯이, formal protocol은 Protocol 클래스로 나타난다. protocol을 다루는 코드는 Protocol 오브젝트를 참조해야만 한다.

- protocol 객체를 참조하는 방법은 @protocol() 디렉티브를 이용해서 한다.

Protocol *counter = @protocol(ReferenceCounting);

- class 이름과 다른 점은, protocol 이름은 @protoco()안에 있는 것을 제외하고는, 어떤 한 객체를 의미하지는 않는다.
  -> ReferenceCounting 만으로는 아무것도 가리키지 않는다는 듯. class일 경우엔 class 이름만으로 class object를 가리키지만.

- 컴파일러는 다음의 경우에만 protocol 객체를 만든다.
  > 클래스에 의해서 adopt 되었을 때,
  > 소스코드에서 다른 어딘가를 참조했을 때 ( @protoco()을 사용해서.. )
즉 선언은 되었지만 사용되지 않는 protocol은 runtime시에 protocol 객체로 나타나지 않는다.