Sobes.tech
Junior — Middle

Existe a possibilidade de implementar um mecanismo próprio de Copy-on-Write no projeto?

sobes.tech IA

Resposta da IA

Sim, no iOS é possível implementar um mecanismo próprio de Copy-on-Write (CoW) para otimizar o uso de memória e melhorar o desempenho ao trabalhar com estruturas de dados mutáveis.

A ideia do CoW é que, ao copiar um objeto, na verdade apenas uma referência aos dados originais é criada, e a cópia real dos dados só ocorre quando se tenta modificar o objeto (ou seja, durante a mutação).

Exemplo de implementação de CoW para uma estrutura com um array:

struct MyData {
    private class Storage {
        var array: [Int]
        init(array: [Int]) {
            self.array = array
        }
        func copy() -> Storage {
            return Storage(array: array)
        }
    }

    private var storage: Storage

    init(array: [Int]) {
        storage = Storage(array: array)
    }

    var array: [Int] {
        get { storage.array }
        set {
            if !isKnownUniquelyReferenced(&storage) {
                storage = storage.copy()
            }
            storage.array = newValue
        }
    }
}

Aqui, isKnownUniquelyReferenced verifica que o objeto storage não está sendo compartilhado com outras instâncias, e se estiver, uma cópia é criada antes de modificar.