Je veux avoir un objet initialisé dans le délégué et je veux pouvoir utiliser cet objet n'importe où sur les contrôleurs de vue (ne dépend pas de la vue à laquelle je suis actuellement). Je devine que la solution à ce serait d'avoir une classe singleton, jusqu'à présent, je donne les résultats suivants:Classe singleton dans l'objectif-C
@interface LocationManager : NSObject <CLLocationManagerDelegate>{
NSDate *enter;
NSDate *exit;
CLLocationManager * manager;
}
@property (nonatomic, retain) NSDate * enter;
@property (nonatomic, retain) NSDate * exit;
- (BOOL)registerRegionWithLatitude:(double)latitude andLongitude:(double)longitude;
+ (LocationManager *)instance;
@end
#import "LocationManager.h"
@implementation LocationManager
@synthesize enter;
@synthesize exit;
#pragma mark - CLLocationManager delegate
static LocationManager *gInstance = NULL;
+ (LocationManager *)instance
{
@synchronized(self)
{
if (gInstance == NULL)
gInstance = [[self alloc] init];
}
return(gInstance);
}
@end
Est-ce exact? Donc, tout ce que j'ai besoin de faire pour y accéder est juste d'appeler instance? A l'intérieur de LocationManager, je veux aussi avoir un seul CLLocationManager, appelé manager. Cependant, où dois-je l'initialiser pour n'en avoir qu'un? Puis-je faire ce qui suit? La plupart des autres exemples singleton Nous ne connaissons aucune variables dans la classe, de sorte que c'est là que je me suis embrouillé
+ (LocationManager *)sharedLocationManager
{
@synchronized(self)
{
if (lm == NULL){
lm = [[self alloc] init];
lm.manager = [[CLLocationManager alloc] init];
lm.manager.delegate = lm;
}
}
return(lm);
}
googler "objective-c singleton" révèle beaucoup des milliers de hits. –
Je le nommer 'sharedLocationManager' au lieu de' instance'. Apple les nomme ainsi (sauf pour NSNull et NSUserDefaults, mais ils sont spéciaux). –