objectpool 包
介绍
objectpool 包提供了一个并发安全的对象缓存类型 ObjectPool。
主要接口
class ObjectPool
public class ObjectPool<T> where T <: Object {
public init(newFunc: () -> T, resetFunc!: Option<(T) -> T> = None)
}
此类提供了一个并发安全的对象缓存类型,该类型可以储存已经分配内存但未使用的对象。
当一个对象不需要使用时可以将对象存入 ObjectPool,当需要使用对象时再从该 ObjectPool 中取出。
储存在一个 ObjectPool 中的对象只能是同一种类型。
在一个 ObjectPool 对象的生命周期结束前,该 ObjectPool 对象中存储的对象不会被释放。
init
public init(newFunc: () -> T, resetFunc!: Option<(T) -> T> = None)
功能:创建新的 ObjectPool 对象。
参数:
- newFunc:当调用 get 方法时,若从 ObjectPool 中获取对象失败,则调用 newFn 创建一个新对象, newFunc 应保证并发安全
- resetFunc:调用 get 方法时会调用 resetFunc 重置对象状态,resetFunc 为 None 表示不重置, resetFunc 应保证并发安全
func get
public func get(): T
功能:尝试从 ObjectPool 中获取对象, 若从 ObjectPool 中获取对象失败,则调用 newFunc 创建新的对象并返回该对象get 的对象不使用之后应该通过 put 归还给 ObjectPool。
返回值:从 ObjectPool 中获取到的对象或调用 newFunc 新建的对象
func put
public func put(item: T): Unit
功能:尝试将对象放入 ObjectPool 中,不保证一定会将对象放入 ObjectPool在对一个对象调用 put 后不应该再对该对象进行任何操作,否则可能导致不可期问题。
参数:
- item:需要放入 ObjectPool 的对象
示例
ObjectPool 的使用示例
下面是 ObjectPool 的使用示例。
代码如下:
from std import objectpool.*
class City {
var id: Int64 = 0
var name: String = ""
}
func resetCity(c: City): City {
let city = c
city.id = 0
city.name = ""
return city
}
main() {
let cityPool = ObjectPool({ => City()}, resetFunc: resetCity)
let cityA = cityPool.get()
cityA.id = 30
cityA.name = "A"
println("id: ${cityA.id}, name: ${cityA.name}")
cityPool.put(cityA)
}
运行结果如下:
id: 30, name: A