将struct传递到函数中是否还会使用写时复制进行优化,还是会立即进行实际复制?

时间:2019-07-05 02:38:14

标签: swift

基于https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html

  

由标准库定义的集合,例如数组,字典,   和字符串使用优化来降低性能成本   复制。这些收藏共享而不是立即复制,而是共享   原始实例之间存储元素的内存   以及任何副本。如果修改了其中一个副本,   元素将在修改之前复制。你的行为   在您的代码中总是看到立即进行复制。

我想知道如何将struct作为函数参数传递,如以下代码所示?

noteStruct = NoteStruct()
// Does actual copy happen immediately?
someFunctionWhichPerformsReadOnly(note)

func someFunctionWhichPerformsReadOnly( _ noteStruct: NoteStruct)

在将struct作为函数参数传递时,实际复制会立即发生吗?还是Swift编译器足够聪明,可以避免上述情况下的实际复制?


示例

struct  Note {
    var data = "original"

    mutating func mutate() {
        data = "modified"
    }

    func readonly() {
        print("read : \(data)")
    }
}

func doSomething1(_ note: Note) {
    var localNote = note
    localNote.mutate()
}

func doSomething2(_ note: Note) {
    note.readonly()
}

let note = Note()
doSomething1(note)
doSomething2(note)

在调用doSomething1doSomething2时,Swift是否足够聪明,可以避免实际复制?

0 个答案:

没有答案