realm可以说对开发者非常友好,基础的东西看两遍中文文档就了解了,不做搬运工了。文章说说文档里面的注意点,和文档之外的实用的东西。希望你们用的上。
realm基础:
github地址:https://github.com/realm/realm-cocoa
中文文档地址:https://realm.io/cn/docs/objc/latest/
realm进阶:
- 数据库迁移
// 数据迁移位置最好在数据库初始化的时候,或者说在使用realm数据库之前,appDelegate也行
// * 很重要 * ,数据库迁移注意数据库名称,不要和默认数据库混淆(这里注意除非使用默认配置数据库,否则任何操作都带上config比较稳)
// 有点鸡肋,正式环境不能让你随意删除旧数据
config.deleteRealmIfMigrationNeeded = YES;
// 数据库方法,sdk提供了几个迁移的方法可以自己看看
// 2者只能取其一,config.deleteRealmIfMigrationNeeded = YES; 下面的block就不会走了。
config.migrationBlock = ^(RLMMigration *migration , uint64_t oldSchemaVersion) {};
- 数据冗余处理方式
// realm暂时不支持循环删除子节点(RLMObject)里面的数据,需要自己手动删除
// addOrUpdata:(必需有主键,subModel可以没有主键)
// 1子节点有主键,更新的时候不用管,删除的时候循环删除子节点,极端情况(极端情况:多个model公用一个主键相同的子节点,删除一个submodel,导致其他用这个submodel的链接也没有了)
// 2子节点无主键,更新的时候要先删除老子节点,删除的时候循环删除子节点 (没有上面公用同一个子节点的问题)
- 数据结果集分页
//realm不支持分页,需要自己手动删除,他们认为数据查询很快把整个结果集给你,你自己处理就好
// 分页查询数据
- (NSArray *)arrayWithPageNum:(NSInteger)pageNum pageSize:(NSInteger)pageSize results:(RLMResults *)results {
NSMutableArray *pageArray = [NSMutableArray array];
for (NSInteger i = pageNum * pageSize; i < pageNum * pageSize + pageSize; i++) {
if (i >= results.count) break;
id object = results[i];
[pageArray addObject:object];
}
return pageArray;
}
- 数据结果集排序
- 数据库建表
- 数据操作通知回调
// api提供了五种之多,选择集合通知和对象通知【删除和修改】处理就可以
- 数据库打开和关闭数据库
异步数据库
远程数据库
压缩数据库
等等等等其他高级功能。
realm注意事项:
- 指定数据库config,因为不指定就成默认数据库了。
- 异步记得要从新生成realm对象
- 删除更新对象什么的,先去数据库查询,找到了再操作。
- 代码入侵性考虑