sirven simbolo signo que para matematicas los llaves imagen esquema ejemplos corchetes objective-c macos cocoa

objective c - simbolo - ¿Para qué son los corchetes angulares "<...>" en una interfaz de clase Obj-C?



llaves simbolo (4)

¿Alguien puede decirme qué significan los corchetes angulares "<...>" en una interfaz de clase Obj-C? Me gusta esto ... http://snipt.net/robhawkes/cocoa-class-interface

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

Desde mi punto de vista, parecen una especie de declaración de tipo (teniendo en cuenta mi experiencia previa en PHP y JavaScript), como asegurarnos de que MapMeViewController sea CLLocationManagerDelegate , MKReverseGeocoderDelegate , MKMapViewDelegate o UIAlertViewDelegate

La documentación sobre la sintaxis de la interfaz @ no parece mencionar esto.


Los corchetes angulares indican un protocolo . Son análogos a las interfaces en otros idiomas.


También puede usarlos en el código como un molde para decirle al compilador que espere un objeto que cumpla con un protocolo en particular.

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


La documentación de Apple informa el uso de corchetes; ver El lenguaje de programación Objective-C en el capítulo 4, sobre "Adopción de un protocolo".

La adopción de un protocolo es similar en algunos aspectos a la declaración de una superclase. Ambos asignan métodos a la clase. La declaración de superclase le asigna métodos heredados; el protocolo le asigna métodos declarados en la lista de protocolos. Se dice que una clase adopta un protocolo formal si en su declaración enumera el protocolo entre paréntesis angulares después del nombre de la superclase:

@interface ClassName : ItsSuperclass < protocol list >

Las categorías adoptan protocolos de la misma manera:

@interface ClassName ( CategoryName ) < protocol list >


Los corchetes angulares en una definición de interfaz de clase indican los protocolos a los que su clase se está adaptando.

Un protocolo es casi como una interfaz en Java o C #, con la adición de que los métodos en un protocolo Objective-C pueden ser opcionales.

Además, en Objective-C puede declarar una variable, argumento o variable de instancia para que se ajuste a varios protocolos también. Ejemplo

NSObject<NSCoding, UITableViewDelegate> *myVariable;

En este caso, la clase debe ser NSObject o una subclase (solo NSProxy y sus subclases fallarían), y también debe cumplir con los protocolos NSCoding y UITableViewDelegate .

En Java o C # esto solo sería posible declarando realmente dicha clase.