我一直在使用大多被用於全局變量,但最近的appDelegate類我才知道,它不是保持全局變量,所以我試圖讓一個單獨的類如下辛格爾頓Imlementation類
@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;
}
}
一個GUD方式
當我在我的appDelegate類中設置totaltime的值並在該類中檢索它時,我只能得到正確的值。但是當我只在其他一些類中檢索到值時,我得到了錯誤的過度。我首先創建共享實例,然後只調用這個方法,那麼爲什麼我得到這個錯誤?
globalVar *myEngine = [globalVar sharedInstance];
NSLog(@"about %@",[myEngine totalTime]);
在我的應用程序委託
globalVar *myEngine = [globalVar sharedInstance];
[myEngine setTotalTime:totalTime];
NSLog(@"in app delegate%@",[myEngine getTotalTime]);
thanx的鏈接 – hemant 2011-03-24 05:05:12