Sobes.tech
Junior — Middle

Lehetséges-e a Copy-on-write támogatásának megvalósítása saját adatszerkezetben?

sobes.tech MI

Válasz az MI-től

Igen, a Copy-on-write (COW) támogatás saját adatstruktúrában is megvalósítható. A COW ötlete az, hogy több objektum osztozhat ugyanazon adatokon, amíg nem szükséges módosítani őket. Amikor módosítás történik, egy másolat készül az adatokból, hogy a változtatások ne befolyásolják a többi objektumot.

Az iOS és Swift esetében ez gyakran referencia számlálással és az objektum egyediségi ellenőrzésével történik a módosítás előtt. Ez nagyjából így néz ki:

class CowBuffer {
    private var data: [Int]
    private var isUniquelyReferenced: Bool {
        return isKnownUniquelyReferenced(&data)
    }

    init(data: [Int]) {
        self.data = data
    }

    func modify(at index: Int, value: Int) {
        if !isUniquelyReferenced {
            data = data.map { $0 } // másolat készítése
        }
        data[index] = value
    }
}

Így a dátum másolata csak akkor készül el, amikor valóban szükséges, ezáltal memória takarítható meg és javul a teljesítmény.