CopyOnWriteSwift
概述
写时复制(Copy-on-write,COW)是一种常见的计算技术,可以在复制结构时提高性能。例如,假设一个数组内部包含1000个元素:如果您将这个数组复制到另一个变量,Swift 将必须复制所有1000个元素,即使这两个数组最终结果是相同的。
写时复制(COW)通过当您指两个变量指向一个实例时,它们都指向相同的底层数据来解决此问题。如果您修改第二个变量,编译器则在此时执行完整的复制,这样只有第二个变量被修改 - 第一个变量不变。
在 Swift 中,只有一些类型的值类型支持写时复制,例如 Array。我们在此使用简单的注解 @CopyOnWrite
将写时复制引入支持 Swift 中的所有值类型。
import CopyOnWriteSwift
struct Foo {...}
@CopyOnWrite
var foo1 = Foo() // memory_address: 0x60000006e420
var foo2 = foo1 // memory_address: 0x60000006e420
foo2.mutatingMethod() // memory_address: 0x6080000a88a0
无 @CopyOnWrite
struct Foo {...}
var foo1 = Foo() // memory_address: 0x60000006e420
var foo2 = foo1 // memory_address: 0x6080000a88a0
此库受到了 Apple 的 Writing High-Performance Swift Code 的启发:
作者:
CocoaPods
一个为 Cocoa 项目提供依赖管理器的工具。您可以使用以下命令安装:
$ gem install cocoapods
要使用 CocoaPods 将 CopyOnWriteSwift 集成到您的 Xcode 项目中,在您的 Podfile
中指定它:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!
pod 'CopyOnWriteSwift', '~> 1.0.0'
然后,运行以下命令:
$ pod install
Carthage
Carthage 是一个去中心化的依赖管理器,它自动将框架添加到您的 Cocoa 应用程序中。
您可以使用以下命令使用 Homebrew 安装 Carthage:
$ brew update
$ brew install carthage
要使用 Carthage 将 CopyOnWriteSwift 集成到您的 Xcode 项目中,在您的 Cartfile
中指定:
github "Duyquang91/CopyOnWriteSwift" ~> 1.0.0
Swift Package Manager
要将 CopyOnWriteSwift 作为 Swift Package Manager 包使用,只需在您的 Package.swift 文件中添加以下内容。
// swift-tools-version:4.2
import PackageDescription
let package = Package(
name: "HelloCopyOnWriteSwift",
dependencies: [
.package(url: "https://github.com/duyquang91/CopyOnWriteSwift.git", .upToNextMajor(from: "1.0.0"))
],
targets: [
.target(name: "HelloCopyOnWriteSwift", dependencies: ["CopyOnWriteSwift"])
]
)
作者
Steve Dao
新加坡 NTUC Enterprise Co-operative Limited公司的高级软件工程师。
许可协议
CopyOnWriteSwift 在 MIT 许可协议下发布。有关详细信息,请参阅 LICENSE。
关于头部图片
头部图片是越南岘港著名的 Cầu Vàng (Golden Bridge)。如果您要去越南旅行,别忘了在那里拍照!