2010-03-02 4 views
1

Je suis confus au sujet du @protocol ---- @ fin dans l'iphone, qu'est-ce que cela signifie réellement. Pourquoi nous utilisons cela. Est-ce une fonctionnalité de fournir des méthodes supplémentaires à une classe ..? je ne suis pas sûr.Protocoles dans l'iPhone SDK

S'il vous plaît aidez-moi.

Merci,

Shibin

+0

Voir aussi cette question: http://stackoverflow.com/questions/1913935/what-are-the-arrow-brackets-in-an-obj-c-class-interface-for –

Répondre

9

protocole est utilisé pour déclarer une fonctionnalité qui va utilisée par de nombreux objets ou classes.

Considérons un exemple, vous développez une base de données d'oiseaux. Ainsi, vous aurez l'oiseau comme classe de base et vous hériterez de l'oiseau pour créer votre propre oiseau. Ainsi, dans une classe d'oiseaux, vous n'aurez pas de définitions mais quelques comportements que tous les oiseaux devront hériter. Comme les oiseaux peuvent voler, a des ailes comme ça. Alors, que ferez-vous? Vous déclarerez tous ces comportements et les appliquerez dans vos classes dérivées. Parce qu'il peut y avoir des oiseaux qui volent haut et sur de longues distances et certains volent sur de courtes distances.

Pour servir à cette fin, @protocol est utilisé. En utilisant @protocol, vous déclarez des comportements. Et utilisez ces comportements dans vos autres classes pour implémenter le comportement.

Cela évitera la surcharge de déclarer la même méthode encore et encore et s'assure que vous implémentez le comportement dans votre classe.

+0

C'est un joli post .. et une explication claire merci beaucoup –

6

@protocol est équivalent à une interface en Java.

@protocol Printable // Printable interface 
- (void) print; 
@end 

@interface MyClass: NSObject <Printable> { ... } 
// MyClass extends NSObject implements Printable 
5

@protocol peut être utilisé pour définir un délégué.

Par exemple:

@protocol SomeDelegate 
- (void)delegateActionCompleted; 
@end 

@interface MyClass: NSObject { 
    id<SomeDelegate> _delegate; 
} 
@end 

Et le fichier mise en œuvre (.m):

@implementation MyClass 

- (void)performAction { 
    // do the actual work 
    if (self._delegate && [self._delegate respondsToSelector:@selector(delegateActionCompleted)]) { 
     [self._delegate delegateACtionCompleted]; 
    } 
} 
@end 
0

Il devrait être préférable d'utiliser quelque chose comme

if (self.delegate && [self.delegate conformsToProtocol:@protocol(YourProtocolName)]) { 
    ... 
} 

pour vérifier si le délégué est conforme effectivement à un protocole spécifié.

Questions connexes