         return nil
     }
     
-    func emptyQueue() -> Void {
+    public func emptyQueue() -> Void {
         reusables.removeAllObjects()
     }
     

            object: nil)
    }
    
    func enqueueReusable(reusable: Reusable) -> Void {
        let identifier = identifierFromReusableClass(reusable.dynamicType)
        var objects: Array<Reusable> = reusables.objectForKey(identifier) as? Array<Reusable> ??  Array<Reusable>()
        reusable.prepareForReuse?()

import Foundation
import UIKit

@objc public protocol Reusable: class {
    optional static func reuseIdentifier() -> String // if not implemented, classname is used
    optional static func newForReuse() -> AnyObject? // if implemented, dequeueOrCreateReusableWithClass can be used
    optional func prepareForReuse() -> Void
}

@objc public class ReusableQueue : NSObject {
    var reusables: NSCache = NSCache();
    
    public static let sharedQueue = ReusableQueue()
    
    override init () {
        super.init()
