带服务器的ios快速图像缓存

带服务器的ios快速图像缓存,ios,objective-c,caching,uiimage,Ios,Objective C,Caching,Uiimage,我正在尝试使用来处理我的应用程序中的照片。他们提供的示例只是从磁盘读取图像。有人知道我如何修改它以从url读取吗?在关于他们的部分 - (void)imageCache:(FICImageCache *)imageCache wantsSourceImageForEntity:(id<FICEntity>)entity withFormatName:(NSString *)formatName completionBlock:(FICImageRequestCompletionBlo

我正在尝试使用来处理我的应用程序中的照片。他们提供的示例只是从磁盘读取图像。有人知道我如何修改它以从url读取吗?在关于他们的部分

- (void)imageCache:(FICImageCache *)imageCache wantsSourceImageForEntity:(id<FICEntity>)entity withFormatName:(NSString *)formatName completionBlock:(FICImageRequestCompletionBlock)completionBlock {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // Fetch the desired source image by making a network request
        NSURL *requestURL = [entity sourceImageURLWithFormatName:formatName];
        UIImage *sourceImage = [self _sourceImageForURL:requestURL];

        dispatch_async(dispatch_get_main_queue(), ^{
            completionBlock(sourceImage);
        });
    });
}    
-(void)imageCache:(FICImageCache*)imageCache wantsourceimageforentity:(id)具有formatName:(NSString*)formatName completionBlock:(FICImageRequestCompletionBlock)completionBlock的实体{
调度异步(调度获取全局队列(调度队列优先级默认为0)^{
//通过发出网络请求获取所需的源映像
NSURL*requestURL=[entity sourceImageURLWithFormatName:formatName];
UIImage*sourceImage=[self\u sourceImageForURL:requestURL];
dispatch\u async(dispatch\u get\u main\u queue()^{
completionBlock(sourceImage);
});
});
}    
以前是否有人使用过此api,并且知道如何从服务器获取源以传递到缓存?另一个仍然使用硬盘的例子是

- (void)imageCache:(FICImageCache *)imageCache wantsSourceImageForEntity:(id<FICEntity>)entity withFormatName:(NSString *)formatName completionBlock:(FICImageRequestCompletionBlock)completionBlock {
    // Images typically come from the Internet rather than from the app bundle directly, so this would be the place to fire off a network request to download the image.
    // For the purposes of this demo app, we'll just access images stored locally on disk.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        UIImage *sourceImage = [(FICDPhoto *)entity sourceImage];
        dispatch_async(dispatch_get_main_queue(), ^{
            completionBlock(sourceImage);
        });
    });
}
-(void)imageCache:(FICImageCache*)imageCache wantsourceimageforentity:(id)具有formatName:(NSString*)formatName completionBlock:(FICImageRequestCompletionBlock)completionBlock的实体{
//图像通常来自互联网,而不是直接来自应用程序包,因此这将是启动网络请求下载图像的地方。
//对于这个演示应用程序,我们将只访问存储在磁盘上的本地图像。
调度异步(调度获取全局队列(调度队列优先级默认为0)^{
UIImage*sourceImage=[(FICDPhoto*)实体sourceImage];
dispatch\u async(dispatch\u get\u main\u queue()^{
completionBlock(sourceImage);
});
});
}

您的方法看起来很像是从URL懒洋洋地加载图像,我必须这样做,一旦我使用了下面的库,它会将图像存储在磁盘中,但会使用缓存图像。下面是它的链接。。

我在Path工作时使用了快速图像缓存。快速图像缓存的关键部分在于,它是从磁盘上的图像数据到由核心动画渲染的绝对最快的方式。不进行解码,应用程序不会将任何图像数据保存在内存中,也不会复制图像

这就是说,你有责任弄清楚如何下载这些图片。下载图像本身并没有什么特别之处。您可以使用
NSURLConnection
或许多流行的网络库之一(如AFNetworking)从服务器下载图像数据。一旦有了该图像数据,就可以调用相关的完成块进行快速图像缓存,使其为将来的渲染进行优化


如果您正在寻找一种下载图像并在完成后显示它的简单方法,那么可以使用SDWebImage之类的工具。对于这样的简单案例来说,这是非常好的。如果您遇到性能瓶颈,尤其是由于应用程序需要快速显示大量图像而导致滚动,那么快速图像缓存非常适合您。

我将网络逻辑添加到我们的fork>

它利用NSURLSessionDownloadTasks,有两个配置选项(可选)。您只需创建
DZFICNetworkController
的新实例,并将其设置为FICImageCache的sharedCache实例对象的委托。它将参考符合
的对象上的
源ImageUrlWithFormatName:
方法下载图像


我假设您在
UITableView
UICollectionView
中使用它,在imageCache上调用
cancelImageRetrievalForEntity:withFormatName:
将取消下载操作(如果它仍在运行或尚未启动)

我建议使用SDwebimage或AFN来平滑更快地加载图像。您找到解决方案了吗?