Ream--(objc)寫事務精簡方案c++
地址: REALM--git
Realm官方提供的的寫事務有兩種方式:github
A
[realm beginWriteTransaction]; // ... [realm commitWriteTransaction]; B [realm transactionWithBlock:^{ //... }];
因爲realm強制線程安全,因此realm對象不適合持有。因此形成了realm寫事務面向realm編程,而不是面向RLMObject編程。或者說realm的面向過的程痕跡還沒消除乾淨,追求速度的realm由c++實現,realm選擇了速度放棄了一些便利。編程
這種編碼方式纔是咱們指望的
[object commitTransaction:^(object){ object.key = value; }];
常見的封裝策略都是圍繞AB兩種形式。圍繞A形式封裝的問題是代碼損耗大,做用域不直觀,而且中間不能return,B形式封裝的問題是誇閉包傳值代碼損耗大,調試原做用域浪費時間,不能return。安全
最理想的編碼方式是一行閉包
{ @realm_writing; /// Begin commit object.key = value; } /// Commit when leava current scope.
這種編碼方式須要藉助析構函數,使用C++會要求全部.m文件修改成.mm。使用Objc in ARC,dealloc的執行存在延遲的可能,沒有C++完美。函數
退而求合適的方案是藉助autoreleasepool來實現dealloc當即執行。autoreleasepool在任何地方return都會完成pool的release。編碼
{ @realm_writing_pool { object.key = value; } }