当前位置: 首页 > news >正文

外贸网站建设seo/免费s站推广网站

外贸网站建设seo,免费s站推广网站,哪个网站可以做签证,win2012服务器做网站原文:Core Data系列四——多线程设计 1. 线程访问限制 NSManagedObjectContext 不允许跨线程操作NSManagedObject 不允许跨线程访问 这两处所说的线程指的NSManagedObjectContext类私有的_dispatchQueue, 我把它叫做MOC的操作线程. MOC还有另外一个私有的_queueO…

原文:Core Data系列四——多线程设计

1. 线程访问限制

  • NSManagedObjectContext 不允许跨线程操作
  • NSManagedObject 不允许跨线程访问

两处所说的线程指的NSManagedObjectContext类私有的_dispatchQueue, 我把它叫做MOC的操作线程.
MOC还有另外一个私有的_queueOwner, 指的是创建这个MOC的线程,我把它叫做MOC的所属线程这两者不是一回事

本节参见:
Core Data Programming Guide: Concurrency
NSManagedObjectContext | Apple Developer Documentation

2. NSManagedObjectContext与多线程相关的说明

MOC有两种类型: 基于线程限制的和基于queue的。

  1. 基于线程限制的MOC,需要保证在MOC的所有操作需要在它的创建线程上。也就是说, 它的操作线程所属线程为同一个线程。这种类型的MOC是通过-init方法初始化的,且要求它的parent store是PSC。
    使用这种基于线程限制的MOC时,需要编程者自己保证仅在它的创建线程上操作它

  2. 基于queue的MOC,为了保证它的所有操作都在其操作线程上(且其操作线程私有),只需要把操作包装在performBlock:或者performBlockAndWait:中。而这两个方法本身是可以在任意线程中调用的。这种类型的MOC,其操作线程和所属线程一般不是同一个线程(NSMainQueueConcurrencyType类型的是例外)。
    以上两种类型的MOC, 其所属线程均为调用它的init方法的线程。

3. 数据同步

当操作线程为A的MOC里的数据有变化时,另一个操作线程为B的MOC如何同步这种变化呢? 两种方案:

  1. 通过监听NSManagedObjectContextDidSaveNotification通知,主动merge.
  2. 通过parent/child nested context. 当child context做save操作后,这种变化会自动同步到parent context中。

MagicalRecord是针对Core Data的二次封装,很好的处理了多线程相关的操作。另外一篇文章中简单分析了MagicalRecord的设计,感兴趣的可以阅读一下。

本节参见:
https://forums.pragprog.com/forums/252/topics/12271
http://oleb.net/blog/2014/06/core-data-concurrency-debugging/#fnref:3

4. 常见的多线程设计方案

根据Core Data大神Florin Kugler的介绍,app中常见的多线程设计的方案有一下三种:
方案1:
在这里插入图片描述

方案2:
在这里插入图片描述

方案3:
在这里插入图片描述

从性能上看,这三种方案中第一种方案对主线程的影响最大。因为虽然耗时的数据操作是放在Bg MOC中操作的,但最终持久化到DB中以及从DB中获取数据均需要通过main MOC。第二种方案的设计的性能介于第二种和第三种之间,但各个context之间的数据同步是通过parent context关系自动同步的,比较优雅。第三种方案的性能最优,但context之间是通过通知来进行的,相对比较复杂。 其中第二种方案的性能差于第三种方案,说明自动save的成本还是比主动merge的成本要高的。

ObjC 中国 - Core Data 试读

5. 关于Core Data多线程的debug

iOS 8.0以上,在 Arguments中添加:-com.apple.CoreData.ConcurrencyDebug 1,系统便会自动加载CoreData debug版本的库。当违反了多线程操作原则时便会强制crash。
说明:本文为原创内容,转载请注明出处

http://www.lbrq.cn/news/1452835.html

相关文章:

  • vultr建站wordpress/教育培训机构前十名
  • 私人网站建设步骤/品牌关键词排名优化怎么做
  • 权威的大连网站建设/google图片搜索引擎入口
  • 成华区微信网站建设/大型网站建设方案
  • 做网站做的/推广普通话的重要意义
  • 新公司做网站怎么弄/营销活动策划
  • 蓟州农家院如何做网站/阿里云域名注册网站
  • 网站托管服务器/今日新闻摘抄二十条
  • 自己做网站原始代码/2345网址导航桌面版
  • 网站建设费能不能认定为广告费/搜索引擎seo如何赚钱
  • 游戏开发网/厦门谷歌seo公司
  • 政府机关单位网站建设方案/如何快速提升网站关键词排名
  • 用国外网站 图片做自媒体/专业培训seo的机构
  • 工商局网站建设查不到/小型项目外包网站
  • 学计算机网站建设/小红书外链管家
  • 广西贺州建设局网站/哈尔滨网络seo公司
  • 营销型网站建设网站建设制作/百度手机助手下载安装最新版
  • 哪个网站做漂流瓶任务/seo教程技术整站优化
  • 网站鼠标悬停动态效果代码/怎么做游戏推广员
  • 网站建设比较合理的流程/深圳关键词推广排名
  • 广州网站推广哪家好/百度网站推广怎么做
  • 茂名网站制作网页/网络平台有哪些?
  • ic外贸网站建设/百家号优化
  • 网站建设怎么添加图片上去/成都网站快速排名
  • 国外文件传输网站/网址缩短在线生成器
  • 可以建网站的软件/网页设计基础
  • 网站建设内容清单/营销网络推广哪家好
  • 怎样做一个免费的网站/内容营销策略
  • 中专网站建设与数据管理是什么/福州seo推广公司
  • 永泰县网站集约化建设/bt磁力在线种子搜索神器下载
  • 【09】C++实战篇——C++ 生成静态库.lib 及 C++调用lib,及实际项目中的使用技巧
  • k8s常见问题
  • Redis 常用数据结构以及单线程模型
  • 多级表头的导出
  • 期权投资盈利之道书籍推荐
  • 基于 LangChain + 通义千问 + bge-large 中文 Embedding 搭建一个RAG问答示例