【问题标题】:UIImageView+AFNetworking setImageWithURLRequest uses RestKit?UIImageView+AFNetworking setImageWithURLRequest 使用 RestKit?
【发布时间】:2014-03-18 20:24:43
【问题描述】:

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

看起来它正在发生,因为 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. 稍微偏离但相关的主题 - 我计划从服务器获取数百个项目,每个项目也可以有很多项目。并且每个都将有图像。所以它是一个相当重的网络应用程序。是否有任何最佳实践来管理这些请求的限制以避免性能问题?

提前谢谢你的帮助..

【问题讨论】:

    标签: ios core-data restkit afnetworking-2


    【解决方案1】:

    考虑到我在使用这个 api 背后的想法是确保图像提取在与 RK 完全分离/独占的线程中,这对我来说是否重要。

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

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

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

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

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

    见上文。

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

    见上文。在RKObjectManageroperationQueue 上设置并发计数。

    【讨论】:

    • 感谢您的回复。将图像保存在光盘上很有意义 - 我将使用 SDWebImage。将在操作队列对象上使用 setMaxConcurrentOperationCount 为 5。
    • 我花了整个下午试图让 SDWebImage 工作,但它似乎不太稳定。请参阅此 [链接] (github.com/rs/SDWebImage/issues/138) 和 this - 我有同样的问题。图像不会随机显示。还有其他选择吗?
    • 我个人使用了一个稍微修改过的github.com/markofjohnson/HJCache(但是项目本身有点过时了)。 SDWebImage 是常用选项。在 github 上搜索流行的替代品。
    【解决方案2】:

    我没有很多 RestKit 知识,但我使用了很多 API,我只是 AFNetworking 和 JSON 解析器,并在 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"]];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多