更新时间:2020-12-29 19:28
APDataCenter 对应的默认存储空间为应用沙箱的 /Documents/Preferences
目录。若业务比较独立或数据量比较多,可以自定义存储空间。统一存储模块提供三种自定义存储方式:
您可以使用 APCustomStorage 创建一个自己的存储目录。在这个目录里,您可以使用统一存储提供的所有服务,类似 APDataCenter。比如:
APCustomStorage* storage = [APCustomStorage storageInDocumentsWithName:@"Contact"];
就会创建 Documents/Contact
目录。这个目录里同样有存储公共数据的commonPreferences
和与用户相关数据的userPreferences
。APCustomStorage 与 APDataCenter 类似,业务同样无须关注用户切换。
(instancetype)storageInDocumentsWithName:(NSString*)name;
创建路径为 /Documents/name 的自定义存储
(id)initWithPath:(NSString*)path;
在任意指定路径创建自定义存储,通常不需要使用这个方法,使用 storageInDocumentsWithName 即可。使用此接口创建的 APCustomStorage,业务需要自己持有,并且当多个 APCustomStorage 的 path 相同时,会出错。
(APBusinessPreferences*)commonPreferences;
与用户无关的全局存储对象,使用 key-value 方式存取数据。与 APDataCenter 的区别是:在业务的自定义存储空间里,存储 key-value 数据时不需要 business 参数,只需要 key 即可。
(APBusinessPreferences*)userPreferences;
当前登录用户的存储对象,使用 key-value 方式存取数据。不是登录态时,取到的是 nil。与 APDataCenter 的区别是:在业务的自定义存储空间里,存储 key-value 数据时不需要 business 参数,只需要 key 即可。
(id)daoWithPath:(NSString*)filePath userDependent:(BOOL)userDependent;
参考 APDataCenter 的同名接口
(APAsyncFileArrayService)asyncFileArrayServiceWithName:(NSString)name userDependent:(BOOL)userDependent capacity:(NSInteger)capacity crypted:(BOOL)crypted;
创建一个异步的文件阵列管理服务,用于存储互相类似的多条文件记录。会根据服务名单独在数据库文件里建表存储,不放在 key-value 存储的表里。
@param name 服务名,不能为空
@param userDependent 是否与用户相关
@param capacity 容量,超过 capacity 条数据后,会自动清除最早的。capacity <= 0 表示不做数量限制。不是字节容量,是条数。
@param crypted 文件内容是否加密
@return 返回 service 对象,业务自行持有
创建一个 id 对象存储的阵列管理服务,用于存储类似的 id 对象,支持内存缓存与数据加密。
@param name 服务名,不能为空
@param userDependent 是否与用户相关
@param capacity 容量,超过 capacity 条数据后,会自动清除最早的。capacity <= 0 表示不做数量限制。不是字节容量,是条数。
@param cacheCapacity 内存缓存的条目数容量,cacheCapacity <= 0 时不使用内存缓存。
@param crypted id 对象是否加密
@return 返回 service 对象,业务需要自行持有
对于传入了 completion 的异步接口,completion 一定会在主线程回调,可为 nil。
(void)writeFile:(NSData)data name:(NSString)name completion:(void(\^)(BOOL result))completion;
写入文件,文件名是 name,当异步写入完成时,会回调 completion。result 返回是否成功。
(void)readFile:(NSString)name completion:(void(\^)(NSData data))completion;
异步读取文件,文件名是 name,完成时会将文件数据在 completion 返回。
(NSData)readFileSync:(NSString)name;
同步读文件
(void)readFilesLike:(NSString)pattern completion:(void(\^)(NSDictionary result))completion;
使用 sqlite 的 like 功能读取批量数据,result 为文件名与文件数据的字典,异步接口。
(void)renameFile:(NSString)name newName:(NSString)newName completion:(void(\^)(BOOL result))completion;
异步重命名文件
(void)removeFile:(NSString*)name;
异步删除文件
(void)removeFilesLike:(NSString*)pattern;
使用 sqlite 的 like 功能批量删除数据
(void)removeAllFiles;
异步删除所有文件
(BOOL)fileExists:(NSString*)name;
同步接口,文件是否存在
(NSArray*)allFileNames;
同步接口,取所有文件名
(NSInteger)fileCount;
同步接口,文件数目
(void)setObject:(id)object forKey:(NSString*)key; // 写 IO 是异步的
设置对象
(id)objectForKey:(NSString*)key; // 如果缓存里没有,同步去数据库中读取
取对象
(void)objectForKey:(NSString*)key completion:(void(^)(id object))completion;
异步读取,读取成功后在主线程调用 completion 返回。
(void)objectsForKeyLike:(NSString)pattern completion:(void(^)(NSDictionary result))completion;
使用 sqlite 的 like 功能读取批量数据,data 为对象名与对象的字典。不检查缓存。
(void)removeObjectForKey:(NSString*)key;
删除数据
(void)removeObjectsForKeyLike:(NSString*)pattern;
使用 sqlite 的 like 功能批量删除数据
(void)removeAllObjects;
删除所有数据
(BOOL)objectExistsForKey:(NSString*)key;
判断某键值数据是否存在
(NSArray*)allKeys;
缓存中所有的 Key
(NSInteger)objectCount;
缓存对象数目
在文档使用中是否遇到以下问题
更多建议
匿名提交