     }
 
 
-
     // We keep a reference on all views.
     var _viewsReferers=[ViewReferer]()
 

    ///   - view: the view to recycle
    open func recycleView(view:BXView)->Bool{
        // Update the view status
        if let vs = self._viewsReferers.first(where: { (viewStatus) -> Bool in
            return viewStatus.view == view
        }){
            view.removeFromSuperview()
            vs.available = true

        return (total,used,available)
    }

    /// The stats formatted in a String
    open var stringStats:String{
        let stats = self.stats()
        return "Total:\(stats.total) used:\(stats.used) available:\(stats.available)"
    }


    /// You must call this method regularly to recycle off screen views.
    open func recycleRecyclableViews(){
        for referer in self._viewsReferers{
            if let superview = referer.view.superview{
                if  referer.view.frame.origin.x + referer.view.frame.width + self.minOffScreenDistance < superview.frame.origin.x ||
                    referer.view.frame.origin.x > superview.frame.origin.x + superview.frame.width + self.minOffScreenDistance ||
                    referer.view.frame.origin.y + referer.view.frame.height + self.minOffScreenDistance < superview.frame.origin.y ||
                    referer.view.frame.origin.y > superview.frame.origin.y + superview.frame.height + self.minOffScreenDistance {
                    referer.view.removeFromSuperview()
                    referer.available = true
                }
            }else if referer.available == false{
                // The clients may remove the view from the superview to force the recycling
                referer.view.removeFromSuperview()
                referer.available = true
            }
        }
    }




    /// Recycles explicitely a view
