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的對生產效率的提升更加明顯git

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

 

其餘平臺亦可借鑑此思路在析構函數來實現。github

相關文章
相關標籤/搜索