zoukankan      html  css  js  c++  java
  • Realm--: 简化iOS下Realm写入事务的最佳解决方案

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

    直接使用

    Goto --> Github

    开始阅读

    解决痛点

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

    需要封装哪些功能?

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

    实现写入事务的开启关闭

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

    实现realm对象的获取方式

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

    实现写入事务避免嵌套

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

    RealmLess的达成效果

    { @realm_writing_scope
       person.name = @"FKJJ";
    }

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

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

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

  • 相关阅读:
    c-指针
    iOS 多线程
    iOS 必备技术点
    网络请求
    objective-c基础教程——学习小结
    id类型
    排序算法
    iOS网络
    iOS 绘图
    Python——字符串2.0(实验)(python programming)
  • 原文地址:https://www.cnblogs.com/xiaobajiu/p/14030199.html
Copyright © 2011-2022 走看看