对于登录时保存用户名和密码,苹果官方使用的是KeychainItemWrapper,但使用时有些不便,如在引入KeychainItemWrapper的类中都要关闭arc,不能自定义key,必须使用该类提供的kSecValueData、kSecAttrAccount等。
所以推荐使用第三方类库——SSkeychain,地址在
https://github.com/samsoffes/sskeychain/
它的优点如下:
①无需手动关闭arc,它会自动判断并运行在arc和非arc环境中
②能存储多组账号和密码
使用方法如下:
①项目中引入Security.framework
②将SSKeychain.h和SSKeychain.m导入项目
1 //储存账号密码 2 -(void)storeAccountAndPwd{ 3 NSString *accountNum = self.accountField.text; 4 NSString *pwdNum = self.pwdField.text; 5 NSString *serviceName = @"cn.zmfc"; 6 [SSKeychain setPassword:pwdNum forService:serviceName account:accountNum]; 7 } 8 //service保存的是服务的类型,就是用户名和密码是为哪个应用保存的一个标志。
结果如下:
1 //删除某组特定的账号跟密码 2 NSString *serviceName = @"cn.zmfc"; 3 NSArray *accountTemp = [[SSKeychain accountsForService:serviceName] lastObject]; 4 NSString *accountNum = [accountTemp valueForKey:@"acct"]; 5 NSString *pwdNum = [SSKeychain passwordForService:serviceName account:accountNum]; 6 [SSKeychain deletePasswordForService:serviceName account:accountNum];
//若要删除所有的账号和密码,则用 NSArray *accounts = [SSKeychain accountsForService:kSSToolkitMyPswdServiceName]; for (NSDictionary *dictionary in accounts) {NSString *account = [dictionary objectForKey:@"acct"];[SSKeychain deletePasswordForService:kSSToolkitMyPswdServiceName account:account]; }
更详细的介绍见这里
http://hi.baidu.com/bupt_zhuo/item/fac2422c1861b14f479962f2
http://blog.csdn.net/fangzhangsc2006/article/details/8716131
引申
有时候导入一些第三方文件需要关闭arc,否则报错。这里给出如何部分或整体关闭arc方法。
①整体关闭arc,即整个项目都关闭
Build settings -> Apple LLVM complier 6.0 - Language - objective-C ——> Automatic Reference Counting设置为NO,即可
②部分关闭,即某个类不需要arc,那么只需在该类中关闭arc即可,不影响整体项目。
Build Phrases ——> Compile Sourses,找到不想加arc的.M 文件,在后面加上 -fno-objc-arc