gpt4 book ai didi

ios - PerformBlockAndWait 与dispatch_sync(dispatch_get_main_queue()

转载 作者:行者123 更新时间:2023-11-29 03:34:30 27 4
gpt4 key购买 nike

Utility.managedObjectContext().performBlockAndWait({

})

dispatch_sync(dispatch_get_main_queue(), {

})
  1. 想知道上面两段代码有什么区别吗?上下文是使用 .MainQueueConcurrencyType 选项创建的。
  2. 如果我在主队列上执行 block ,队列是否按 FIFO 顺序执行?或者它们可以重叠,操作混合吗? IE。 (a1,a2,a3),(b1,b2,b3) 可以得到 (a1,b1,a2,a3,b2,b3)?

最佳答案

你在这里混合了两个完全不同的概念,但由于它是主线程/上下文/队列,你的混合被屏蔽并且它“有效”。

Managed object context 的 performBlockAndWait:performBlock: 方法不保证在哪个线程上执行该 block ,只保证访问/更改的数据是安全访问的。由于您的上下文是主队列并发类型,因此在 performBlockAndWait:performBlock: 方法之外接触其对象是安全的,在主队列中只有线程。因此,当您将 block 排队到主队列上运行时,它可以保证在主线程上运行,因此您的数据是安全的。

主线程上的 block 执行不是原子的。否则,多线程有什么意义?为保证数据安全,访问数据时必须调用performBlockAndWait:performBlock:方法。您可以保证主队列调度 block 不会被其他主队列调度 block 中断地运行,并且托管对象上下文队列(后台或主队列)是串行的,因此只允许一个 block 并发访问数据。

关于ios - PerformBlockAndWait 与dispatch_sync(dispatch_get_main_queue(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19369929/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com