UIImageView + AFNetworking setImageWithURLRequest使用RestKit?

时间:2014-03-18 20:24:44

标签: ios core-data restkit afnetworking-2

我正在使用RestKit(0.20.0)进行我的Rest Api实现 - 所有GET,POST等.GET返回图像的一些网址。我正在使用UIImageView + AFNetworking setImageWithURLRequest函数来下载这些。我很惊讶看到RestKit日志被打印用于这些提取,所以我做了一些调试。似乎AFNetworking发送了一些通知,最终登陆RestKit。

enter image description here

看起来它正在发生,因为AFNetworkingOperationDidStartNotification是为了获取图像而触发的,而RK已在RKObjectRequestOperation.m中注册了此通知。

        [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(HTTPOperationDidStart:)
                                                 name:AFNetworkingOperationDidStartNotification
                                               object:nil];

我的问题是 -

  1. 对我来说,如果我使用这个api,我的想法是确保图像提取是完全独立/排他的线程而不是RK。

  2. 这会影响我的CoreData实施吗?这个图像是否会被缓存 - 我猜它不会是因为我没有明确地存储它但是如果这些操作开始在与Rest api操作相同的池中发生它可能会影响性能吗?

  3. 这是正确的实施吗?我是否应该在CoreData中缓存图像而根本不使用AFNetworking api?

  4. 稍微关闭但相关主题 - 我计划从服务器获取数百个项目,每个项目也可以有很多项目。而且每一个都会有图像。所以它是一个非常网络繁重的应用是否有任何最佳实践来管理对这些请求的限制以避免性能问题?

  5. 提前帮助..

2 个答案:

答案 0 :(得分:1)

我没有很多RestKit知识,但我使用了很多API,我只使用JSON解析器AFNetworking,并在NSDictionery中处理它。对于图像缓存问题,如何根据我的最佳解决方案是SDWebImages库。它简单而且单独工作,它将处理所有缓存问题。和你的问题4.使用AFNetworking requestManager并且不要在主线程上处理你的数据(我认为RestKit和/或AFNetworking)会处理这个并且实现SDWebImages很简单,因为这个

#import "SDWebImage/UIImageView+WebCache.h"
[userImage setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/12345/picture?type=large"]]
              placeholderImage:[UIImage imageNamed:@"unknownUser.png"]];

答案 1 :(得分:1)

  

对我来说,如果我使用这个api的想法是确保图像提取是完全独立/排他的线程而不是RK,那么对我来说这是否重要。

不,不应该。该请求仍将在不同的线程上运行。

  

这是否会影响我的CoreData实施?这个图像是否会被缓存 - 我猜它不会是因为我没有明确地存储它但是如果这些操作开始发生在与Rest api操作相同的池中它可能会影响性能吗?

图像仅缓存在内存中(如果内存可用)。一般来说,我同意@m-farhan SDWebImage是更好的选择,不是要与Core Data分开,而是将图像缓存到磁盘,这样你就不会继续下载它们了。通常,您不希望将图像存储在Core Data中。

如果您同时进行所有请求,则任何请求都会影响性能。您应该将并发网络操作限制为~4或5。

  

这是正确的实施吗?我是否应该在CoreData中缓存图像而根本不使用AFNetworking api?

见上文。

  

稍微关闭但相关主题 - 我计划从服务器获取数百个项目,每个项目也可以包含许多项目。而且每一个都会有图像。所以它是一个非常网络繁重的应用是否有任何最佳实践来管理对这些请求的限制以避免性能问题?

见上文。在operationQueue的{​​{1}}上设置并发计数。