我有一个文件Variables.m用于存储我可以在我的应用程序中的所有类中使用的属性。现在我想为A类中的一个属性(比如用户名)设置一个值,我希望它可以在我的应用程序中用作所有其他类(B,C,D,E ..),就像一个常量。即。一旦他们在B类中初始化一个Variables对象(比如var),如果他们发出var.username,他们应该得到我在A类中设置的用户名。
实际上,我没有硬编码用户名值,而是想以编程方式设置它,并让所有类看到我刚设置的值。每当我导航到一个类时,我是否可以在不传递Variables对象的情况下实现这一目标?
答案 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