CoreData - performBlock: & performBlockAndWait:

官方文档

performBlock:
You use this method to send messages to managed objects if the context was initialized using NSPrivateQueueConcurrencyType or NSMainQueueConcurrencyType.

This method encapsulates an autorelease pool and a call to processPendingChanges.

performBlockAndWait:
You use this method to send messages to managed objects if the context was initialized using NSPrivateQueueConcurrencyType or NSMainQueueConcurrencyType.

This method may safely be called reentrantly.
注意最后一句,苹果申明了这个函数是可以安全的递归调用的.

processPendingChanges:
This method causes changes to registered managed objects to be recorded with the undo manager.
In AppKit-based applications, this method is invoked automatically at least once during the event loop (at the end of the loop)—it may be called more often than that if the framework needs to coalesce your changes before doing something else. You can also invoke it manually to coalesce any pending unprocessed changes.

processPendingChanges改变当前对象的状态图;
processPendingChanges类似于告诉字处理器在文档的编辑后更新它的内部状态,但不保存到磁盘。多用于用户界面上 更新数据;
processPendingChanges常用在单独线程上运行多个上下文;

save保存到磁盘;
调用save将自动调用processPendingChanges;
在我们保存数据到数据库的时候常用 save方法;

错误案例1:

在performBlockAndWait代码块中刷新UI,UI 有时不正确,UI 数据源是来自有关block块中的NSManageObject对象
原因就是因为虽然在block中修改了数据源的值,但是并未及时保存,代码块执行完成之后才调用processPendingChanges: 方法.

[_contextToSetMetadata performBlockAndWait:^{
    //logic code ....
    dispatch_async(dispatch_get_main_queue(), ^{
        [[NSNotificationCenter defaultCenter] postNotificationName:kNotifyRefreshUI object:nil];
    });
}];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值