直接使用
Goto --> Github
開始閱讀
解決痛點
痛點1,重複代碼,原本增刪改查通常兩三行的,提交就佔了2行,基本上代碼量多一小半 [[RLMRealm defaultRealm] beginWriteTransaction]; /// 修改數據庫 [[RLMRealm defaultRealm] commitWriteTransaction]; 痛點2 這種方式體驗比上方的好,可是多了block閉包,缺陷也很多,如不能直接return,跨域傳值,弱引用也有多餘的代碼量,並且在block內部也須要重複獲取realm對象。 [[RLMRealm defaultRealm] transactionWithBlock:^{ /// 修改數據庫 }];
須要封裝哪些功能?
- 寫入事務的開啓關閉
- realm對象的獲取方式
- 寫入事務避免嵌套
實現寫入事務的開啓關閉
- 利用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