코드 상에서 값을 복사해서 담는다 하더라도, 실제 값이 바뀌기 전까지는 하나의 메모리 값을 공유해서 사용한다.
메모리를 적게 차지하기 위해서 Swift 언어가 내부에서 처리하는 매커니즘
코드로 한번 살펴보겠습니다.
var array = [1, 2, 3, 4, 5, 6]
var subArray = array[0...2]
subArray.append(7)
subArray 배열을 생성할 때 array의 배열 [0...2] 부분을 대입했지만
이때 값의 복사가 아니라 동일한 메모리 공간을 가르키고 있게 됩니다.
그리고 값의 변경이 일어날 때 (여기서 append()) 값이 복사됩니다.
Swift에서는 원시타입 구조체(Int, Double, String)와 Array, Set, Dictionary 등 컬렉션 구조체에 이미 구현되어 있다고 합니다.
개발자가 직접 구현하는 구조체, 클래스 같은 경우에는 Copy-on-Write가 적용되어있지 않습니다.
'iOS > STUDY' 카테고리의 다른 글
[iOS] @discardableResult (0) | 2022.04.05 |
---|---|
[iOS] UICollectionReusableView (diffable datasource) (0) | 2022.04.02 |
[iOS] UISegmentedControl (0) | 2022.03.26 |
[iOS] UISwipeActionsConfiguration (0) | 2022.03.26 |
[iOS] Realm의 특징 (0) | 2022.03.22 |