文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Swift5强制独占内存怎么办

2023-06-04 08:17

关注

本篇内容介绍了“Swift5强制独占内存怎么办”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Swift 5 将带来改进的 Swift 程序内存安全性,在程序的其他部分修改变量时,不允许通过其他变量名来访问这些变量。这个变更对现有应用程序的行为和 Swift 编译器本身都有重要影响。

在多种情况下会发生独占内存访问问题。编译器可以静态地捕获大部分问题,剩下的只能在运行时处理。只能在运行时处理的问题包括具有转义闭包、类类型属性、静态属性和全局变量的排他性违规。

为了更好地说明这个问题,我们可以考虑一个相当普遍的情况:修改一个函数的 inout 变量,这个函数执行了一个闭包,这个闭包使用同一作用域内的两个不同的名称访问上述的变量:

func modifyTwice(_ value: inout Int, by modifier: (inout Int) -> ()) {  modifier(&value)  modifier(&value)}func testCount() {  var count = 1  modifyTwice(&count) { $0 += count }  print(count)}

在这个例子中,因为使用 count 同时作为 modifyTwice 和 modifier 的 inout 参数,所以出现了问题。我们不清楚 print 语句应该打印出什么内容。第一次 count 变量递增,它的值递增到 2。但是,当执行第二次加法时,要添加到 $0 的 count 值是多少?这可能取决于很多因素,因为内存操作不一定是瞬时的。更糟糕的是,编译器可能会引入优化,进一步使这种情况复杂化。

这个问题不仅与通过不同变量名同时修改内存的不可预测性有关,也与编译器的复杂性有关。

这可能会导致意外和混乱的结果。它还导致编译器和标准库的实现具有很大的保守性,它们通常必须确保程序的基本可靠性(没有崩溃或未定义的行为),即使是在不寻常的情况下。

所有这些意味着如果发现独占访问冲突,使用 Swift 5 编译器编译的应用程序将在运行时崩溃。这个行为以前在 Swift 4 编译器调试模式下可用,因此,仅在运行时模式下测试过的程序在使用 Swift 5 编译时有崩溃的风险。

Swift 4 编译器可用,因此仅在运行时模式下测试的程序在使用 Swift 5 编译时可能会崩溃。

修复访问独占违规的一般方法是复制数据。在我们的示例中,这将归结为:

func modifyTwice(_ value: inout Int, by modifier: (inout Int) -> ()) {  modifier(&value)  modifier(&value)}func testCount() {  var count = 1  let increment = count  modifyTwice(&count) { $0 += increment }  print(count)}

实际上,访问独占违规检查可能会被禁用,但强烈建议不要这样做:

虽然禁用运行时检查可能可以解决性能问题,但这并不意味着独占违规是安全的。如果没有启用强制执行,程序员必须遵守独占规则。

“Swift5强制独占内存怎么办”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯