在目标c中以编程方式设置属性值

时间:2012-08-31 14:09:59

标签: iphone objective-c ios properties

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

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

3 个答案:

答案 0 :(得分:2)

或者,您可以使用NSUserDefaults

在A类中设置变量:

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

在任何类中读取变量:

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

除了简单之外,这有利于(或不)在应用程序重启时持续存在。

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

答案 1 :(得分:1)

创建一个singelton类,它具有您希望它存储的项目的相应getter和setter。

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

例如在你的Variables类中创建一个类方法,如下所示:

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

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

:)

要从您的其他类别中使用此功能,您只需键入:

[Variables sharedVariables].whatever

答案 2 :(得分:0)

您可以使用Singleton模式。像这样。

@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