ReuseableQueue 是一个简单、私有的免费队列,您可以用来重复使用每个对象。
pod 'BRReuseQueue/Swift'
use_frameworks!
pod 'BRReuseQueue/OBJC'
// Import BRReusableQueue
import BRReusableQueue
// get hold of your queue
let reusableQueue = BRReusableQueue.sharedQueue // or you can create your own one
// enqueue an object you don't need
let reusableObject = ReusableClass()
reusableQueue.enqueueReusable(reusableObject)
// dequeue the object
reusableQueue.dequeueReusableWithClass(ReusableClass)
// Import BRReusableQueue
@import BRReusableQueue;
// get hold of your queue
ReusableQueue *reusableQueue = [BRReusableQueue sharedQueue]; // or you can create your own one
// enqueue an object you don't need
ReusableClass *reusableObject = [ReusableClass new];
[reusableQueue enqueueReusable:reusableObject];
// dequeue the object
[reusableQueue dequeueReusableWithClass:ReusableClass];
存储在 ReusableQueue 中的所有对象都必须实现 Reusable
协议。协议中的所有方法都是可选的,旨在帮助您自定义队列。
默认情况下,reuseIdentifier 是对象的类名。您可以通过实现 reuseIdentifier
来更改此行为。
optional static func reuseIdentifier() -> String
默认情况下,您只能使用 dequeueReusableWithIdentifier
和 dequeueReusableWithClass
方法来获取对象。如果队列中没有指定标识符的对象,则这些方法返回 nil。
dequeueOrCreateReusableWithClass
将从队列中取出一个对象,如果没有找到则创建一个新的。
optional static func newForReuse() -> AnyObject?
每个被放入可重复使用队列中的对象都会调用 prepareForReuse
方法。使用它来将其重置为默认状态,并去除您不需要的所有内容。
optional func prepareForReuse() -> Void
Swift 和 Objc 变体是并存的。Objc 变体存在是因为Objc-only项目可以在不要求Swift运行时的情况下使用它。Swift 变体存在是因为我想在 Swift 中玩耍。
这种设置使得测试有点困难。测试代码应该以完全相同的方式进行两种变体的测试。为了在 Swift / Objc 代码之间切换测试,请更改(取消)注释 BRReusableQueue-Bridging-Header.h
和 BRReusableQueueTests.swift:12
中的行。我仍在寻找一种优化方法。