2017-07-22 12 views
5

Tôi đọc về triển khai sao chép trên ghi cho Array trong Swift here.Loại giá trị nào trong Swift hỗ trợ copy-on-write?

Mảng giống như tất cả các bộ sưu tập có kích thước biến trong thư viện chuẩn, hãy sử dụng tối ưu hóa sao chép ghi. Nhiều bản sao của một mảng chia sẻ cùng một bộ nhớ cho đến khi bạn sửa đổi một trong các bản sao. Khi điều đó xảy ra, mảng đang được sửa đổi thay thế lưu trữ của nó bằng bản sao duy nhất của chính nó, sau đó được sửa đổi tại chỗ. Tối ưu hóa đôi khi được áp dụng có thể làm giảm số lượng sao chép.

Tôi đã tự hỏi liệu bạn có bất kỳ thông tin nào về cấu trúc nào hỗ trợ sao chép trên ghi hay không.

Trả lời

5

Ghi sao chép được hỗ trợ cho String và tất cả các loại bộ sưu tập - Array, DictionarySet.

Bên cạnh đó, trình biên dịch được tự do tối ưu hóa mọi truy cập cấu trúc và có hiệu quả cung cấp cho bạn ngữ nghĩa sao chép trên ghi, nhưng nó không được đảm bảo.

+0

"không được bảo đảm" là một cách để đặt. Nếu bạn muốn ngữ nghĩa copy-on-write, bạn sử dụng 'isKnownUniquelyReferenced (& ref)' một cách rõ ràng. (Ngoài ra bạn "chỉ phải gọi hàm này từ các phương thức đột biến với đồng bộ hóa luồng thích hợp"; lưu ý rằng văn bản không trỏ đến cách các bộ sưu tập không đồng bộ tiêu chuẩn quản lý để tránh vi phạm điều này. [Tài liệu chính thức này] (https: // github. com/apple/swift/blob/master/docs/OptimizationTips.rst # lời khuyên-sử dụng-copy-on-write-ngữ nghĩa-cho-lớn-giá trị)) https://marcosantadev.com/copy-write-swift-value loại / – sourcejedi

Các vấn đề liên quan