我正在编写我的第一个 Cocoa 应用程序。
现在,每次我需要 时NSUserDefaults
,我都会初始化该类的一个对象并在本地范围内使用它。
这有点乏味。所以我想知道我应该把NSUserDefaults
声明和初始化放在哪里,以便它可以用于我的所有Application Delegate
方法?
我正在编写我的第一个 Cocoa 应用程序。
现在,每次我需要 时NSUserDefaults
,我都会初始化该类的一个对象并在本地范围内使用它。
这有点乏味。所以我想知道我应该把NSUserDefaults
声明和初始化放在哪里,以便它可以用于我的所有Application Delegate
方法?
尝试使用用户默认值时,您应该简单地使用此单例
[NSUserDefaults standardUserDefaults];
在需要的地方调用默认值并没有错。无论如何,它是一个单身人士。
如果您将其放入您的应用程序委托中,您将只是以相同的方式调用以获取 NSUserDefaults。
如果您想为您的应用程序初始化默认值 - 可以在+initialize
您的应用程序委托的方法中执行此操作。
I'm initialising an object of the class and use it in the local scope.
根本不需要。如果你想在 UserDefaults 中保存一些东西,可可为你提供了一个共享实例/单例。
每当您需要更新保存的值时,您调用[NSUserDefaults standardUserDefaults]
并使用它,只会为您保存一个实例。
[[NSUserDefaults standardUserDefaults] setObject:yourObject forKey:@"yourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
进行用户默认值的一个好方法是创建自己的PFXDefaults
类(替换PFX
为您喜欢的前缀),该类具有访问和改变您关心的值的方法。这允许你写
[[PFXDefaults sharedDefaults] setUserName:@"Nate"];
而不是
[[NSUserDefaults] setObject:@"Nate" forKey:@"userName"];
将此类设置为前缀通常很方便,或者,除非.h
在您的应用程序委托上使用可见(在文件中声明)属性,否则会很方便。
界面PFXDefaults
看起来像
@interface PFXDefaults : NSObject
@property (nonatomic) NSString *userName;
@end
并且实现看起来像
static NSString * const PFXDefaultUserNameKey = @"PFXDefaultUserNameKey";
@implementation PFXDefaults
- (void)setUserAge:(NSString *)userName
{
[[NSUserDefaults standardUserDefaults] setObject:userName forKey:PFXDefaultUserNameKey];
}
- (NSInteger)userAge
{
return [[NSUserDefaults standardUserDefaults] stringForKey:PFXDefaultUserNameKey];
}
@end