1.NSUserDefaults
2.归档 浅谈iOS本地数据保存 - 简书
使用NSKeyedArichiver /ɑːkaɪv/进行归档、NSKeyedUnarchiver进行接档,这种方式会在写入、读出数据之前对数据进行序列化、反序列化操作。
//归档:对象->NSData的过程
//解归档:NSData->对象的过程;
//对数据的操作效率不高,不建议存储大量的数据
//任何对象实现归档需要遵循NSCoding 协议,NSArray NSString NSDictionary 已经遵守了协议 直接归档即可;
BOOL isSuccessed= [NSKeyedArchiver archiveRootObject:array toFile: @""];
NSArray *tmp=(NSArray *) [NSKeyedUnarchiver unarchiveObjectWithFile:@""];
//任意对象的归档 需要遵守归档协议 NSCoping,并实现归档和解归档的方法(encodeWithCoder和initWithCoder)再分别对类中的变量进行归档和解归档;
3.文件保存
4.数据库sqlite3:
fmdb
CoreData
CoreData提供了一种“对象-关系映射”的功能,能将OC对象转化成数据,保存Sqlite中。CoreData的好处就是能够合理管理内存,避免sql语句的麻烦(不用写sql语句)。
5.NSUrlCache
6.KeyChain(钥匙串)等多种方式 (与沙盒无关)
fmdb
它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,所以是线程安全的。
FMDB框架中重要的框架类
FMDatabase
FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句
FMResultSet使用FMDatabase执行查询后的结果集
FMDatabaseQueue用于在多线程中执行多个查询或更新,它是线程安全的
2.keychain
SFHFKeychainUtils
相比于NSUserDefaults来说,KeyChain保存更为安全,而且KeyChain里面保存的数据不会因为app删除而丢失。
KeyChain还有一个用途,就是替代UDID。UDID已经被废除了,所以只能用UUID代替,所以我们可以把UUID用KeyChain保存。
来源:iOS Keychain(钥匙串) 原理和APP之间共享信息(例如:账号密码) - freestyle个人页面 - 开源中国
##关于共享 Keychain的数据可以透过Group Access的方式,让资料可以在App间共享,Google系列的App (Gmail、Google+、日历…)就是通过这样的方式来记录使用者登入信息,只要使用者在其中一个App中完成登入了,其他的App也可以读取到同相的登入咨询进行登录。 ###进入Capabilities,将Keychain打开
开启Keychain后,会自动新增一个Keychain Group,使用的是Bundle Identifier。 同时也会自动新增一个entitlements文件,里面也会有一个Access Group,名为 $(AppIdentifierPrefix)+你的bundleID
(AppIdentifierPrefix)可以是开发者的代号需要登录才会有,也就是开发者证书后小括号的内的英文数字组合。使用$(AppIdentifierPrefix)只能被同一个开发者账号的app来存取,以防被有心人盜取。