0

我有一个文件 Variables.m 用于存储我可以在我的应用程序中的所有类中使用的属性。现在我想为 A 类中的一个属性(比如用户名)设置一个值,并且我希望它对我的应用程序中的所有其他类(B、C、D、E ..)都可用,就像一个常量. IE。一旦他们在 B 类中初始化了一个变量对象(比如 var),如果他们发出 var.username,他们应该得到我在 A 类中设置的用户名。

实际上,我不想硬编码用户名值,而是想以编程方式设置它并让所有类看到我刚刚设置的值。每当我导航到一个类时,我可以在不传递变量对象的情况下实现这一点吗?

4

3 回答 3

2

或者,您可以使用NSUserDefaults

在 A 类中设置变量:

NSString *usernameToSave = @"John Doe";
[[NSUserDefaults standardUserDefaults] setObject:usernameToSave forKey:@"userName"];

读取任何类中的变量:

NSString *userName = [[NSUserDefaults standardUserDefaults] objectforKey:@"userName"];

除了简单之外,这还具有(或不具有)在应用程序重新启动时保持不变的优点。

它的缺点是不是很安全;对于密码等,您应该使用此处描述的钥匙串服务。

于 2012-08-31T14:25:50.097 回答
1

创建一个单例类,该类为您希望存储的项目提供适当的 getter 和 setter。

然后,您可以从任何其他类中引用该单个实例。

例如,在您的变量类中创建一个类方法,如下所示:

    +(Variables*)sharedVariables{
        static Variables *myVariables = nil;
        if (myVariables != nil){
             return myVariables;
        }
       myVariables = [[Variables alloc]init];
       return myVariables;
    }

如果你想要一个更好的实现,那么谷歌目标 C 单例类实现。

:)

要从其他类中使用它,您只需键入:

[Variables sharedVariables].whatever
于 2012-08-31T14:17:07.410 回答
0

You can use Singleton pattern. Like this.

@interface MySingleton : NSObject 
{
    NSString *username;
}
@property (nonatomic, retain) NSString *username;
+ (MySingleton *) sharedInstance;

@end


@implementation MySingleton
@synthesyse username;
static MySingleton *sMySingleton = nil;

+ (MySingleton *) sharedInstance
{
    @synchronized(self)
    {
        if (sMySingleton == nil)
        {
            sMySingleton = [NSAllocateObject([self class], 0, NULL) init];
        }
    }    
    return sMySingleton;
}

@end
于 2012-08-31T14:18:37.953 回答