Atomic 1.0.3

Atomic 1.0.3

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布上次发布2016年2月
SPM支持 SPM

ADlai Holler 维护。



Atomic 1.0.3

Atomic

Atomic 是一个用于在 Swift 中使值线程安全的高速、安全类。它由 pthread_mutex_lock 支持,这是最快速、最高效的锁定机制。

安装

  • 通过在 Podfile 中添加 pod Atomic 来使用 CocoaPods。
  • 通过在 Cartfile 中添加 github "Adlai-Holler/Atomic" 来使用 Carthage。

如何使用

/// This class is completely thread-safe (yay!).
final class MyCache<Value> {
    private let entries: Atomic<[String: Value]> = Atomic([:])

    func valueForKey(key: String) -> Value? {
        return entries.withValue { $0[key] }
    }

    func setValue(value: Value, forKey: Key) {
        entries.modify { (var dict) in
            dict[key] = value
            return dict
        }
    }

    func clear() {
        entries.value = [:]
    }

    func copy() -> [String: Value] {
        return entries.value
    }
}

另一个例子

/// Thread-safe manager for the `networkActivityIndicator` on iOS.
final class NetworkActivityIndicatorManager {
    static let shared = NetworkActivityIndicatorManager()

    private let count = Atomic(0)

    func incrementActivityCount() {
        let oldValue = count.modify { $0 + 1 }
        if oldValue == 0 {
            updateUI(true)
        }
    }

    func decrementActivityCount() {
        let oldValue = count.modify { $0 - 1 }
        if oldValue == 1 {
            updateUI(false)
        }
    }

    private func updateUI(on: Bool) {
        dispatch_async(dispatch_get_main_queue()) {
            UIApplication.sharedApplication().networkActivityIndicatorVisible = true
        }
    }
}

特点

  • 安全。无需记住解锁。
  • 快速。 pthread_mutex_lock 比起 NSLock 快,比 OSSpinLock 高效。
  • 现代。您可以在其方法内安全地 throw 错误,采用 @noescape 和泛型来使您的代码尽可能简洁。
  • 经过测试。这个玩意儿经过了大量测试,包括从 100,000 次操作中并发访问它!

归属

Atomic.swift 的原始版本是由 ReactiveCocoa 贡献者编写的。