【发布时间】:2016-11-10 11:33:27
【问题描述】:
Swift 数组是在写入时复制的值类型。如果原始数组未发生变异,则“副本”指向相同的内存位置。
假设我们有一个被多个线程引用的类
class Foo {
var numbers: [Int] = [1, 2, 3]
}
let foo = Foo()
如果线程 A“复制”numbers
var numbers = foo.numbers
然后线程 B 用不同的数组实例替换 numbers
foo.numbers = [4, 5, 6]
当线程 B 尝试访问其元素时,原始数字数组 ([1, 2, 3]) 是否会被释放,从而导致 incorrect checksum for freed object - object was probably modified after being freed?
【问题讨论】:
-
您收到哪个对象的错误/警告?
-
我非常不喜欢 Swift 数组通过值而不是指针传递的方式。这已经让我晾干了好几次了。