氧同位素是 E-sites iOS Suite 的一部分。
一个小巧的 Swift 辅助类,用于使用对象池
兼容
- Swift 5
- Xcode 11
安装
CocoaPods
pod 'Oganesson'
SwiftPM
.package(url: "https://github.com/e-sites/Oganesson", .branch("master"))
使用方法
初始化
class SomeView: UIView, ObjectPoolCompatible {
required convenience init() {
self.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100)
}
}
var objectPool: ObjectPool<SomeView>!
override func viewDidLoad() {
super.viewDidLoad()
objectPool = ObjectPool<SomeView>(size: 20, policy: .dynamic) { obj in
obj.backgroundColor = UIColor.red
}
objectPool.onAcquire { [view] obj in
DispatchQueue.main.async {
view.addSubview(obj)
}
}
objectPool.onRelease { obj in
DispatchQueue.main.async {
// It's safe to remove the object from its superview,
// since `ObjectPool` will keep its (memory) retained.
obj.removeFromSuperview()
}
}
}
从池中获取对象
do {
let object = try objectPool.acquire()
object.backgroundColor = UIColor.orange
} catch let error {
print("Error acquiring object: \(error)")
}
完成对象的使用
objectPool.release(object)
策略
dynamic
:如果池被排空,则使用+1填充池static
:池大小固定。如果池被排空,则抛出Error.drained