如何在Objective C中使用单例数据?

时间:2011-11-27 21:59:35

标签: objective-c singleton

我尝试创建一个单例来设置并获取不同视图之间的字符串:

globalVar.h:

@interface globalVar : NSObject
{
    NSString *storeID;
}

+ (globalVar *)sharedInstance;
@property  (nonatomic, copy) NSString *storeID;
@end

globalVar.m:

#import "globalVar.h"

@implementation globalVar
@synthesize storeID;

+ (globalVar *)sharedInstance
{
       static globalVar *myInstance = nil;    

    if (nil == myInstance) {
        myInstance  = [[[self class] alloc] init];        
    }
    return myInstance;
}
@end

现在我该如何实际使用字符串?假设我想在一个视图中将其设置为“asdf”并在另一个视图中加载“asdf”。

2 个答案:

答案 0 :(得分:5)

要进行设置,请执行以下操作:

[globalVar sharedInstance].storeID = @"asdf";

使用它:

NSString *myString = [globalVar sharedInstance].storeID;

答案 1 :(得分:1)

首先,您需要更改创建实例的方式。这样做:

+ (GlobalVar *)sharedInstance
{
    static GlobalVar *myInstance;
    @synchronized(self) {
        if (nil == myInstance) {
            myInstance = [[self alloc] init];
        }
    }
    return myInstance;
}

想要使用[self class],因为在这种情况下,self已经是globalVar类。

其次,您应该使用大写GlobalVar命名班级G

第三,你会像这样使用它:

[GlobalVar sharedInstance].storeID = @"STORE123";
NSLog(@"store ID = %@", [GlobalVar sharedInstance].storeID);