Ream--(objc)写事务精简方案
Ream--(objc)写事务精简方案
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; } }
相关推荐
likesyour 2020-08-01
likesyour 2020-06-07
ErixHao 2020-06-03
GDreams0 2020-06-01
nullcy 2020-04-25
visionzheng 2020-04-20
ganjing 2020-02-16
luckyxl0 2019-12-24
GDreams0 2019-12-22
Julywhj 2019-12-14
likesyour 2019-12-06
ganjing 2019-11-09
AndrewYuan 2019-11-09
AndrewYuan 2019-11-06
longdan0 2017-07-27
Cshnuscw 2015-06-24
tulunta 2015-06-24
DeadKnight 2019-04-07
子云 2016-03-23