我正在构建我的第一个大型 iOS 应用程序,并且使用了很多视图控制器和标签栏。我希望从每个视图控制器访问一些属性(如username
等)。isUSerLoggedIn
我正在使用NSUserDefaults
来保存这些属性。这是一个很好的技术吗?
问问题
101 次
2 回答
1
NSUserDefault 用于持久保存。
用户名是一个很好的例子,isUSerLoggedIn 并不总是(认为即使您的应用程序已终止,它也会被保存,这是您想要的吗?)。
在某些情况下,您应该考虑使用单例:
static SingletonSample *sharedObject;
+ (SingletonSample*)sharedInstance
{
if (sharedObject == nil) {
sharedObject = [[super allocWithZone:NULL] init];
}
return sharedObject;
}
于 2013-07-03T06:59:18.963 回答
0
有两种方法:
1)你可以使用钥匙串。
例子:
//Initializing
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
//Saving
[keychainItem setObject:@"password you are saving" forKey:kSecValueData];
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];
//Getting
NSString *password = [keychainItem objectForKey:kSecValueData];
NSString *username = [keychainItem objectForKey:kSecAttrAccount];
//deleting
[keychainItem resetKeychainItem];
2)或者你可以使用 NSUserDefaults
例子:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *pword = [prefs setObject:@"yourpassword" ForKey:@"password"];
NSString *username = [prefs setObject:@"username" ForKey:@"username"];
[prefs synchronize];
//getting
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *pword = [prefs objectForKey:@"password"];
NSString *username = [prefs objectForKey:@"username"];
方法 1 比方法 2 更安全,因为 NSUserDefaults 只是一个 plist。有人窃取了您的设备,进行了备份,并将所有密码保存在一个漂亮的 xml 文件中。使用加密,方法 2 变为方法 1,只是更复杂。
于 2013-07-03T07:24:25.717 回答