登录时本地保存账号密码及关闭ARC的方法

对于登录时保存用户名和密码,苹果官方使用的是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

原文地址:https://www.cnblogs.com/Apologize/p/4318501.html