J'ai vu l'utilisation de l'Objective-C protocoles de s'habituer à un mode tels que les suivants:
@protocol MyProtocol <NSObject>
@required
@property (readonly) NSString *title;
@optional
- (void) someMethod;
@end
J'ai vu ce format utilisé à la place de l'écriture d'un béton de la superclasse que les sous-classes étendre. La question est de savoir si vous vous conformer au présent protocole, avez-vous besoin de synthétiser les propriétés de vous-même? Si vous êtes à l'extension d'une super-classe, la réponse est évidemment non, vous n'avez pas besoin. Mais comment fait-on traiter avec des propriétés d'un protocole oblige à se conformer à l'?
À ma connaissance, vous avez encore besoin de déclarer les variables d'instance dans le fichier d'en-tête d'un objet qui est conforme à un protocole qui exige de ces propriétés. Dans ce cas, peut-on supposer qu'ils sont juste un principe directeur? Clairement ce n'est pas le cas pour la méthode requise. Le compilateur va gifler votre poignet pour l'exclusion d'une méthode requise d'un protocole de listes. Quelle est l'histoire derrière propriétés?
Voici un exemple qui génère une erreur de compilation (Note: j'ai garni le code qui permet de ne pas réfléchir sur le problème à portée de main):
MyProtocol.h
@protocol MyProtocol <NSObject>
@required
@property (nonatomic, retain) id anObject;
@optional
TestProtocolsViewController.h
- (void)iDoCoolStuff;
@end
#import <MyProtocol.h>
@interface TestProtocolsViewController : UIViewController <MyProtocol> {
}
@end
TestProtocolsViewController.m
#import "TestProtocolsViewController.h"
@implementation TestProtocolsViewController
@synthesize anObject; // anObject doesn't exist, even though we conform to MyProtocol.
- (void)dealloc {
[anObject release]; //anObject doesn't exist, even though we conform to MyProtocol.
[super dealloc];
}
@end