【发布时间】:2019-01-28 02:55:48
【问题描述】:
根据 Swift Programming Language Guide (for Swift 4.2) 中的“内存安全”一章,有一句“A function has long-term write access to all its in-out parameters”。 https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html
我创建了一个新的命令行工具项目来在 Xcode 10.1 中验证它。
var stepSize = 1
func increment(_ number: inout Int) {
print(stepSize)
}
increment(&stepSize)
我希望输出为 1,但实际输出的是崩溃日志“同时访问 0x100587430,但修改需要独占访问”。
我知道这是关于访问 in-out 参数的冲突,但我不知道为什么会发生这种情况。为什么一个函数对其所有输入输出参数都有长期写入权限?
【问题讨论】:
-
“in-out 参数的写访问 [...] 持续该函数调用的整个持续时间” 你是说你希望写访问在函数返回之前结束?
-
为什么单线程swift会出现内存冲突?我从未听说过 javascript 中的内存冲突
-
查看 WWDC 2018 What’s New in Swift 中关于内存排他性检查的讨论。
标签: swift memory-safety