Skip to content

Instantly share code, notes, and snippets.

@Roshankumar350
Last active December 26, 2025 07:03
Show Gist options
  • Select an option

  • Save Roshankumar350/1b0111ae4978920fbfeefb7518d20fe5 to your computer and use it in GitHub Desktop.

Select an option

Save Roshankumar350/1b0111ae4978920fbfeefb7518d20fe5 to your computer and use it in GitHub Desktop.
Copy on write:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
let person1 = Person(name: "Mike")
let person2 = person1
let address1 = Unmanaged.passUnretained(person1).toOpaque()
let address2 = Unmanaged.passUnretained(person2).toOpaque()
// Both are same
print("Person1: \(address1)")
print("Person2: \(address2)")
struct Animal {
var name: String
}
var animal1 = Animal(name: "Tiger")
var animal2 = animal1
// Both are not same
withUnsafeBytes(of: &animal1) { pointer in
print("Animal1: \(pointer)")
}
withUnsafeBytes(of: &animal2) { pointer in
print("Animal2: \(pointer)")
}
@Roshankumar350
Copy link
Author

var array1 = Array(repeating: 1, count: 1000)
var array2 = array1 // This is a "Value Type" copy

print("--- Before Modification ---")
// Both will print same
array1.withUnsafeBufferPointer { pointer in
    print("array1: \(pointer)")
}
array2.withUnsafeBufferPointer { pointer in
    print("array2: \(pointer)")
}

// 2. Modify array2
print("\n--- After Modification ---")
array2.append(2)
// Both will print different
array1.withUnsafeBufferPointer { pointer in
    print("array1: \(pointer)")
}
array2.withUnsafeBufferPointer { pointer in
    print("array2: \(pointer)")
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment