Le délégué de l'application est un endroit raisonnable pour le mettre. Une autre option consiste à créer une classe de fabrique personnalisée Singleton qui a une méthode de classe qui renvoie votre délégué de gestionnaire d'emplacement et implémente les méthodes de délégué là. Cela garderait votre classe de délégué de l'application plus propre.
Voici une implémentation de classe squelette singleton basée sur "Singletons in Cocoa: Doing them wrong" de Peter Hosey. Cela peut être exagéré, mais c'est un début. Ajoutez vos méthodes de délégué à la fin.
static MyCLLocationManagerDelegate *sharedInstance = nil;
+ (void)initialize {
if (sharedInstance == nil)
sharedInstance = [[self alloc] init];
}
+ (id)sharedMyCLLocationManagerDelegate {
//Already set by +initialize.
return sharedInstance;
}
+ (id)allocWithZone:(NSZone*)zone {
//Usually already set by +initialize.
@synchronized(self) {
if (sharedInstance) {
//The caller expects to receive a new object, so implicitly retain it
//to balance out the eventual release message.
return [sharedInstance retain];
} else {
//When not already set, +initialize is our caller.
//It's creating the shared instance, let this go through.
return [super allocWithZone:zone];
}
}
}
- (id)init {
//If sharedInstance is nil, +initialize is our caller, so initialze the instance.
//If it is not nil, simply return the instance without re-initializing it.
if (sharedInstance == nil) {
if ((self = [super init])) {
//Initialize the instance here.
}
}
return self;
}
- (id)copyWithZone:(NSZone*)zone {
return self;
}
- (id)retain {
return self;
}
- (unsigned)retainCount {
return UINT_MAX; // denotes an object that cannot be released
}
- (void)release {
// do nothing
}
- (id)autorelease {
return self;
}
#pragma mark -
#pragma mark CLLLocationManagerDelegateMethods go here...
Comment puis-je aller sur la mise en œuvre d'une classe usine singleton? Cela semble être une bonne façon de procéder, mais je ne suis pas sûr à 100% par où commencer. – joec
Voir l'exemple ci-dessus. –
le formatage du code n'a pas fonctionné (désolé!) – joec