经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
Realm--: 简化iOS下Realm写入事务的最佳解决方案
来源:cnblogs  作者:米太白  时间:2020/12/8 9:03:26  对本文有异议

Realm--: 简化iOS下Realm写入事务的最佳解决方案(其他平台亦可借鉴次思路)

直接使用

Goto --> Github

开始阅读

解决痛点

  1. 痛点1,重复代码,本来增删改查一般两三行的,提交就占了2行,基本上代码量多一小半
  2. [[RLMRealm defaultRealm] beginWriteTransaction];
  3. /// 修改数据库
  4. [[RLMRealm defaultRealm] commitWriteTransaction];
  5. 痛点2 这种方式体验比上方的好,但是多了block闭包,缺陷也不少,如不能直接return,跨域传值,弱引用也有多余的代码量,而且在block内部也需要重复获取realm对象。
  6. [[RLMRealm defaultRealm] transactionWithBlock:^{
  7. /// 修改数据库
  8. }];

 

需要封装哪些功能?

  1. 写入事务的开启关闭
  2. realm对象的获取方式
  3. 写入事务避免嵌套

实现写入事务的开启关闭

  • 利用cleanup属性在作用域结束时自动执行的功能可以实现自动关闭写入事务,并且不妨碍return,没有跨作用于传值。

实现realm对象的获取方式

  • 利用宏定义轻松向作用域内提供固定的realm变量

实现写入事务避免嵌套

  • 这种复杂的判断宏不能很优美的解决需要引入特定对象,该对象主要负责记录是否嵌套,然后处理对应的情况。

RealmLess的达成效果

  1. { @realm_writing_scope
  2. person.name = @"FKJJ";
  3. }

特别复杂的情况,RealmLess的对生产效率的提高更加明显

  1. { @realm_writing_scope_with(OtherRealmObject)
  2. [rll_realm deleteObject:obj1];
  3. { @realm_writing_scope_with(rll_realm)
  4. [rll_realm addObject:obj2]; /// RealmLess的嵌套时修改立即生效
  5. }
  6. obj2 = [Obj2 objectWhere:...];
  7. }

 

其他平台亦可借鉴此思路在析构函数来实现。

原文链接:http://www.cnblogs.com/xiaobajiu/p/14030199.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号