2009-12-16 2 views
18

Obj-C 클래스 인터페이스에서 꺽쇠 괄호 "<...>"이 무엇을 말해 줄 수 있습니까? 우리가 MapMeViewController가, MKReverseGeocoderDelegateCLLocationManagerDelegate입니다 확인하는 것 같은이처럼 ... 그들이 유형 선언의 일종처럼 보이는 내보기에서Obj-C 클래스 인터페이스의 꺾쇠 괄호 "<…>"은 무엇입니까?

@interface MapMeViewController : UIViewController <CLLocationManagerDelegate, 
      MKReverseGeocoderDelegate, MKMapViewDelegate, UIAlertViewDelegate> { ... } 

http://snipt.net/robhawkes/cocoa-class-interfaceMKMapViewDelegate, 또는 UIAlertViewDelegate을 (PHP와 자바 스크립트에 내 이전 경험을 고려)

@interface 구문에 관한 문서에는이 부분이 없습니다.

답변

35

클래스 인터페이스 정의의 꺾쇠 괄호는 클래스가 준수하는 프로토콜을 나타냅니다.

프로토콜은 Java 또는 C#의 인터페이스와 거의 비슷하며 Objective-C 프로토콜의 메소드를 선택적으로 사용할 수 있습니다.

또한 Objective-C에서 변수, 인수 또는 인스턴스 변수를 선언하여 여러 프로토콜을 준수 할 수도 있습니다. 이 경우 예

NSObject<NSCoding, UITableViewDelegate> *myVariable; 

클래스는 NSObject 또는 (실패 만 NSProxy와 그 서브 클래스) 서브 클래스해야하며, 또한 모두 NSCodingUITableViewDelegate 프로토콜을 준수해야합니다.

Java 또는 C#에서는 실제로이 클래스를 선언해야만 가능합니다.

9

꺽쇠 괄호는 protocol을 나타냅니다. 다른 언어의 인터페이스와 유사합니다.

4

Apple 설명서에서 대괄호 사용을보고합니다. 4 장의 "프로토콜 채택"에서 The Objective-C Programming Language을 참조하십시오.

프로토콜을 채택하는 것은 어떤면에서 수퍼 클래스를 선언하는 것과 유사합니다. 둘 다 클래스에 메서드를 할당합니다. 수퍼 클래스 선언은 상속 된 메소드를 할당합니다. 프로토콜은 프로토콜 목록에 선언 된 메소드를 할당합니다.

@interface ClassName : ItsSuperclass < protocol list > 

카테고리가 거의 같은 방법으로 프로토콜을 채택 : 클래스는 선언이 슈퍼 클래스 이름 뒤에 꺾쇠 괄호 내의 프로토콜을 나열하면 공식적인 프로토콜을 채택 말한다

@interface ClassName (CategoryName) < protocol list > 
6

캐스트와 같은 코드에서이를 사용하여 컴파일러에게 특정 프로토콜을 준수하는 객체를 기대하도록 지시 할 수 있습니다.

id <NSFetchedResultsSectionInfo> sectionInfo = [[self.noteFetcher sections] objectAtIndex:section]; 
관련 문제