J'utilise la plupart du temps la classe appDelegate pour les variables globales, mais récemment, je suis venu pour savoir que ce ne est pas une façon GUD pour garder les variables globales, donc je suis en train de faire une classe singleton comme suitImlementation de Singleton classe
@implementation globalVar
static globalVar *_sharedInstance =nil;
@synthesize totalTime;
- (id) init
{
if (self = [super init])
{
}
return self;
}
+ (globalVar *) sharedInstance
{
@synchronized (self) {
if (_sharedInstance == nil) {
[[self alloc] init];
}
}
return _sharedInstance;
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (_sharedInstance == nil) {
_sharedInstance = [super allocWithZone:zone];
return _sharedInstance;
}
}
return nil;
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
-(NSUInteger)retainCount
{
return NSUIntegerMax; //denotes an object that cannot be released
}
- (void)release
{
// do nothing
}
- (id)autorelease
{
return self;
}
- (void) setTotalTime:(NSString *)time
{
@synchronized(self) {
if (totalTime != time) {
[totalTime release];
totalTime = [NSString stringWithFormat:@"%@",time];
}
}
//NSLog(@"time %@",totalTime);
}
-(NSString *)getTotalTime
{
@synchronized(self) {
//NSLog(@"total %@",totalTime);
return totalTime;
}
}
Lorsque je définis la valeur de totaltime dans ma classe appDelegate et que je la récupère dans cette classe uniquement, j'obtiens la valeur correcte. mais quand je récupère seulement la valeur dans une autre classe je reçois BAD EXCESS. Je crée d'abord l'instance shared et alors seulement appelez cette méthode alors pourquoi suis-je obtenir cette erreur ??
globalVar *myEngine = [globalVar sharedInstance];
NSLog(@"about %@",[myEngine totalTime]);
dans mon délégué app
globalVar *myEngine = [globalVar sharedInstance];
[myEngine setTotalTime:totalTime];
NSLog(@"in app delegate%@",[myEngine getTotalTime]);
Thanx pour la lien – hemant