Ream--(objc)写事务精简方案

404 阅读1分钟

地址: REALM--

这篇文章针对代码的写法进行讨论,虽然结论不多但是过程费脑。

Realm官方提供的的写事务有两种方式:

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++的析构函数,但使用C++会要求所有.m文件修改为.mm。最终选择的是使用attribute来实现。