为什么所有异步图像加载(SDWebImage,AFNetworking)库都使用UIImageView而不是UIImage?

我错过了什么吗? 不允许它与UIImage一起使用比UIImageView更通用吗? 您可以将UIImage用于处理并将其用于不同的事物,其中UIImageView实际上只能添加到视图中。

我最初的想法是,如果你把它交给另一个类并且UIImage尚未加载,它将收到nil并且不会传递任何新内容。 但是如果你传递一个UIImageView同样适用,不是吗?

AFNetworking

你是对的,AFNetworking类别实现(UIImageView + AFNetworking)是不容易的。

但是你缺少AFImageResponseSerializer ,它可以validation和解码图像并提供一些处理它们的选项。 (在旧的1.x版AFNetworking中,此function位于AFImageRequestOperation中 。)

SDWebImage

同样,您只关注SDWebImage的基本实现。 这里有很多选项,所以我建议你复习一些其他类,但在最基本的层面,你可以得到这样的UIImage:

 SDWebImageManager *manager = [SDWebImageManager sharedManager]; [manager downloadWithURL:imageURL options:kNilOptions progress:^(NSUInteger receivedSize, NSUInteger expectedSize) { // update a progress view } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { if (image) { // Do something with the image; cacheType tells you if it was cached or not. } }]; 

异步加载

如果你把它交给另一个类并且UIImage还没有加载怎么办?

好吧,它都是异步加载的,因此在加载UIImage之前不会调用完成块。