Ream--(objc)寫事務精簡方案

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;
    }
}
相關文章
相關標籤/搜索