码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-23 22:31:30      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:tor   target   c++   强制   线程安全   选择   编码方式   作用域   形式   

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

地址: 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++会要求所有.m文件修改为.mm。使用Objc in ARC,dealloc的执行存在延迟的可能,没有C++完美。

退而求合适的方案是借助autoreleasepool来实现dealloc立即执行。autoreleasepool在任何地方return都会完成pool的release。

{
    @realm_writing_pool {
        object.key = value;
    }
}

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

标签:tor   target   c++   强制   线程安全   选择   编码方式   作用域   形式   

原文地址:https://www.cnblogs.com/xiaobajiu/p/12231532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!