     var cacheOn: Bool { get }
 }
 
+/**
+ Since Feed Controllers use generics to ensure type saftey, they inherit from this common class so we can compare different
+ Feed Controllers with the '==' operator
+ */
 public class FeedControllerGeneric {
     
 }

    
    private func _processNewItems(newItems: [T], clearCacheIfNewItemsAreDifferent: Bool) {
        
        //prevent calls of this method on other threads from mutating items array while we are working with it
        objc_sync_enter(self)
        defer {
            objc_sync_exit(self)

}

public class FeedController <T:FeedItem> : FeedControllerGeneric{
    
    ///The items in the feed.
    private(set) public var items: [T]! = []
    public weak var delegate: FeedKitControllerDelegate?
    private(set) var cachePreferences: CachePreferences
    public var cache: FeedCache<T>?
    
    ///The section in a UITableView or UICollectionView that the Feed Controller corresponds to.
    let section: Int!

    
    /**
     Initialize the Feed Controller
     
     parameter cachePreferences: The cache preferences.
     parameter section: The section of the tableview or collection view that the controller corresponds to.
     */
    public init(cachePreferences: CachePreferences, section: Int){
        self.section = section
        self.cachePreferences = cachePreferences
