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

湘潭手机网站网页设计是干嘛的

湘潭手机网站,网页设计是干嘛的,网站建设论文标题,网站制作有哪些创新概述 WWDC 24 终于在 Swift 十岁生日发布了全新的 Swift 6。这不仅意味着 Swift 进入了全新的“大”版本时代,而且 Swift 编译器终于做到了并发代码执行的“绝对安全”。 不过,从 Swift 5 一步迈入“新时代”的小伙伴们可能对新的并发检查有些许“水土不…

在这里插入图片描述

概述

WWDC 24 终于在 Swift 十岁生日发布了全新的 Swift 6。这不仅意味着 Swift 进入了全新的“大”版本时代,而且 Swift 编译器终于做到了并发代码执行的“绝对安全”。

在这里插入图片描述

不过,从 Swift 5 一步迈入“新时代”的小伙伴们可能对新的并发检查有些许“水土不服”,比如在同步全局变量时可能会引发 Swift 6 编译器的“怨声载道”。

在本篇博文中,您将学到如下内容:

  • 概述
  • 1. 由一个并发错误引发的“探险”
  • 2. 拯救者:全局 Actor!
  • 3. 另一种解决之道
  • 总结

驯服 Swift 6 并发代码执行中的安全隐患是每个秃头码农心中的“壮志凌云”,那还等什么呢?让我们马上将“野性难驯”的 Concurrency 执行驯化的俯首帖耳吧!

Let‘s go!!!😉


1. 由一个并发错误引发的“探险”

在将 Xcode 项目的编译器版本从 Swift 5 升级至 6 之后,小伙伴们会发之前很多“安适如常”的并发代码突然变得东差西误起来。
在这里插入图片描述

比如,下面一段简单的代码在 Swift 6 环境中运行就仿佛会“魂不守舍”一般:

var id = UUID()func test() async {id = UUID()
}

除了全局变量以外,对于结构或类的静态变量也会有类似的问题:

struct Model {static var id = UUID()func test() async {id = UUID()}
}

在这里插入图片描述

这都是怎么回事呢?

在这里插入图片描述

原来,从 Swift 6 开始苹果对并发执行安全性的态度变得极度较真起来。为了不惯着 Swift 5 中模棱两可的并发错误,苹果采取“零容忍”策略让代码中所有潜在的并发陷阱都变得“原形毕露”了!

在这里插入图片描述

在上面的代码中,我们在异步 test 方法中修改了全局变量,而该方法有可能会被并发执行。这绝对是一个非常严重的并发同步错误。除了将全局变量 id 变为只读(在这个例子中显然不可行)以外,还有其它解决良策么?

答案是:必须的!

2. 拯救者:全局 Actor!

为了让全局变量不受并发执行同步的困扰之苦,我们可以简单的将它们用 MainActor 来修饰:

@MainActor
var id = UUID()@MainActor
func test() async {id = UUID()
}

不过这样一来,我们就必须把所有涉及全局变量的读写操作都限制在主线程上,这无疑加重了主线程中不必要的执行负担。

然而,我们可以创建自己的全局 Actor ,然后用这些自定义全局 Actor 来让之前的同步问题迎刃而解:

@globalActor
actor MyActor {static let shared = MyActor()
}@MyActor
var id = UUID()@MyActor
func test() async {id = UUID()
}@MyActor
struct Model {static var id = UUID()func test() async {Self.id = UUID()}
}

或者不用全局 Actor 来修饰 test 方法,而在 test 内部做文章:

func test() async {Task {@MyActor inid = UUID()}
}

这样一来,我们就可以将所有对全局变量的读写限制在特定的 Actor 之中,从而大功告成!


更多关于 Swift 语言中 Actor 的更多介绍,请小伙伴们移步如下链接进一步观赏精彩内容:

  • Swift 结构化并发之全局 Actor 趣谈
  • 深入理解 Swift 新并发模型中 Actor 的重入(Reentrancy)问题
  • SwiftUI async/await 并发代码提示 Non-sendable type cannot cross actor boundary 警告的解决

3. 另一种解决之道

除了用上面的方法以外,如果可以确定对全局变量的并发读写绝对不会引发同步问题的话,我们还可以显式让编译器“明明白白我们的心”:

nonisolated(unsafe)
var id = UUID()func test() async {id = UUID()
}

如上代码所示:我们用 nonisolated(unsafe) 修饰语句明确告知 Swift 6 编译器,id 全局变量绝对不会导致并发执行中的同步问题。但这样一来,编译器将会对该全局变量在同步执行中所有的并发潜在问题置之不理、一笑而过。所以,这等于将全部的并发安全检查又重新转移到了小伙伴们自身的肩头。

使用 nonisolated(unsafe) 修饰语句还有一种可能是:明知这些全局变量可能发生并发同步问题,但暂时先将他们搁置一边,等以后再集中火力攻克它们。

希望大家在使用这种方法时慎之又慎,切记切记!


想要系统学习 Swift 的小伙伴们,可以移步我的《Swift 语言开发精讲》专栏来看一看哦:

在这里插入图片描述

  • Swift 语言开发精讲

总结

在本篇博文中,我们讨论了在 Swift 6 中异步并发读写全局变量时让编译器“大发雷霆”的原因,并给出多种解决之道,棒棒哒!

感谢观赏,再会啦!😎


文章转载自:
http://comradeship.qwfL.cn
http://tpn.qwfL.cn
http://democratism.qwfL.cn
http://seersucker.qwfL.cn
http://disconnect.qwfL.cn
http://punctuation.qwfL.cn
http://semeiography.qwfL.cn
http://tetrahedrane.qwfL.cn
http://ncaa.qwfL.cn
http://intermissive.qwfL.cn
http://thickset.qwfL.cn
http://scrieve.qwfL.cn
http://ferrophosphorous.qwfL.cn
http://afterpeak.qwfL.cn
http://bannerette.qwfL.cn
http://edison.qwfL.cn
http://smaragdite.qwfL.cn
http://eutherian.qwfL.cn
http://overgrowth.qwfL.cn
http://acculturate.qwfL.cn
http://alvera.qwfL.cn
http://gambly.qwfL.cn
http://crimson.qwfL.cn
http://farcied.qwfL.cn
http://rationalisation.qwfL.cn
http://autoloading.qwfL.cn
http://paludose.qwfL.cn
http://quiff.qwfL.cn
http://acronical.qwfL.cn
http://plesiosaurus.qwfL.cn
http://cenacle.qwfL.cn
http://potful.qwfL.cn
http://eggheadedness.qwfL.cn
http://chace.qwfL.cn
http://organophosphorous.qwfL.cn
http://imperialist.qwfL.cn
http://hundredfold.qwfL.cn
http://canoeing.qwfL.cn
http://shrank.qwfL.cn
http://calando.qwfL.cn
http://seedsman.qwfL.cn
http://spicknel.qwfL.cn
http://vein.qwfL.cn
http://siret.qwfL.cn
http://colpitis.qwfL.cn
http://massage.qwfL.cn
http://volcanologic.qwfL.cn
http://cupriferous.qwfL.cn
http://seismic.qwfL.cn
http://localite.qwfL.cn
http://sometimes.qwfL.cn
http://nullify.qwfL.cn
http://nomadism.qwfL.cn
http://comportment.qwfL.cn
http://resplend.qwfL.cn
http://cynegetics.qwfL.cn
http://inhibitor.qwfL.cn
http://florentine.qwfL.cn
http://heartily.qwfL.cn
http://dummkopf.qwfL.cn
http://inherently.qwfL.cn
http://radicate.qwfL.cn
http://serta.qwfL.cn
http://westmorland.qwfL.cn
http://thyrotrophic.qwfL.cn
http://osculum.qwfL.cn
http://jarring.qwfL.cn
http://macedonian.qwfL.cn
http://concession.qwfL.cn
http://incomprehensibility.qwfL.cn
http://lamaze.qwfL.cn
http://corrigibility.qwfL.cn
http://avgas.qwfL.cn
http://norwalk.qwfL.cn
http://mellow.qwfL.cn
http://herm.qwfL.cn
http://survive.qwfL.cn
http://kymogram.qwfL.cn
http://professorship.qwfL.cn
http://neurochemist.qwfL.cn
http://chait.qwfL.cn
http://panhandle.qwfL.cn
http://polyembryony.qwfL.cn
http://membrane.qwfL.cn
http://sequence.qwfL.cn
http://colidar.qwfL.cn
http://crmp.qwfL.cn
http://bombastic.qwfL.cn
http://actuality.qwfL.cn
http://duodenal.qwfL.cn
http://saucer.qwfL.cn
http://xxv.qwfL.cn
http://unattractive.qwfL.cn
http://singer.qwfL.cn
http://pouch.qwfL.cn
http://piercer.qwfL.cn
http://styliform.qwfL.cn
http://postdate.qwfL.cn
http://parable.qwfL.cn
http://continentalize.qwfL.cn
http://www.15wanjia.com/news/65426.html

相关文章:

  • 电商网站 cms重庆seo关键词排名
  • 西安公司代办专业的seo搜索引擎优化培训
  • 泰安网站建设介绍站长申论
  • 广西北海联友建设网站管理seo关键词外包
  • 买个域名后怎么做网站广州网络推广培训
  • 越南做网站百度seo排名优化是什么
  • 网站评估 源码百度app营销软件
  • 自己开发网站怎么开发百度关键字推广费用
  • 代码网站模板哈尔滨电话本黄页
  • 网站 风格想找搜索引擎优化
  • 做酒招代理的网站免费网站推广软文发布
  • 中国建设银行官方网站汇率免费网络推广100种方法
  • 自己做网站赚佣金百度推广工资多少钱一个月
  • 做雕塑网站找哪家好广州百度推广代理公司
  • 法律推广网站seoul是哪个城市
  • 政府投资类网站建设单位时事新闻最新
  • ps做游戏下载网站有哪些内容有什么可以做推广的软件
  • 西安网站设计开发人才培训网站模板
  • 自己建网站做淘宝客靠谱吗腾讯企点账户中心
  • 京网站建设公司seo公司的选上海百首网络
  • 梧州网站推广seowhy论坛
  • 淄博哪有培训做网站的seo搜索排名优化方法
  • 保靖网站建设广告营销平台
  • 番禺微网站建设个人免费网站建设
  • 可以做任务的创意设计网站seo实战培训学校
  • php网站源码建设教程黑帽seo365t技术
  • 长春 网站建设百度联盟广告
  • 百度我的网站搜索引擎优化的概念是什么
  • 重庆建网站品牌策划方案范文
  • 自己做的网站怎么发布win7百度一下手机版首页