unloadCacheForTile(tile, key, destroy, okIfNotExists) {
            const cacheRecord = this._cachesLoaded[key];
            //unload record only if relevant - the tile exists in the record
            if (cacheRecord) {
                if (cacheRecord.removeTile(tile)) {
                    if (!cacheRecord.getTileCount()) {
                        if (destroy) {
                            // #1 tile marked as destroyed (e.g. too much cached tiles or not a zombie)
                            cacheRecord.destroy();
                        } else {
                            // #2 Tile is a zombie. Do not delete record, reuse.
                            this._zombiesLoaded[key] = cacheRecord;
                            this._zombiesLoadedCount++;
                        }
                        // Either way clear cache
                        delete this._cachesLoaded[key];
                        this._cachesLoadedCount--;
                    }
                    return true;
                }
                $.console.error("[TileCache.unloadCacheForTile] System tried to delete tile from cache it " +
                    "does not belong to! This could mean a bug in the cache system.");
                return false;
            }
            if (!okIfNotExists) {
                $.console.warn("[TileCache.unloadCacheForTile] Attempting to delete missing cache!");
            }
            return false;
        }
Delete cache record for a given til
@param {OpenSeadragon.Tile} tile
@param {string} key cache key
@param {boolean} destroy if true, empty cache is destroyed, else left as a zombie
@param {boolean} okIfNotExists sometimes we call destruction just to make sure, if true do not report as error
@private