UIImageView + AFNetworking映像请求队列阻止来自RestKit的其他网络请求

fsc*_*ger 5 iphone nsoperationqueue ios restkit afnetworking

我通过创建RKObjectRequestOperations并将它们添加到RestKit的队列来下载Data with RestKit :

RKObjectRequestOperation *operation = [RK objectRequestOperationWithRequest:request
       success:...
       failure:...];
[RK enqueueObjectRequestOperation:operation];
Run Code Online (Sandbox Code Playgroud)

那个效果很好.此外,此数据显示在列表视图中,其中包含显示相关用户图标的UIImageViews.但是,这些用户图标不是通过RestKit下载,而是通过底层的AFNetworking库下载.UIImageView + AFNetworking也做得很好(包括缓存):

[self setImageWithURLRequest:userIconRequest
            placeholderImage:anonymousUser
                     success:nil
                     failure:...];
Run Code Online (Sandbox Code Playgroud)

问题是来自图像视图的那15个用户图标请求阻止了应该立即加载下一页的RestKit请求的处理.我可以看到显示"加载"行的列表以及第一个用户图标.在最后一张图片完成加载的那一刻,下一页自己附加.

查看UIImageView + AFNetworking的实现表明它正在使用自己的序列化请求的NSOperation队列实例.但是,我认为这不应该干扰RestKit.

同时向NSOperationQueuePriority所有请求添加s不会改变任何事情.也许在内部,网络请求以不同的方式序列化?我如何确定这些请求的优先顺序?

提前致谢.

Aar*_*ger 0

NSURLConnection具有未记录的最大连接数。

此外,UIImageView+AFNetworking的操作队列具有NSOperationQueueDefaultMaxConcurrentOperationCount最大当前请求,根据这个听起来令人信服的 AFNetworking 讨论,这对于您的用例来说可能是一个糟糕的选择。

你需要节流。我看到两个简单的解决方案:

  1. 修改UIImageView+AFNetworking为最多有 4 个并发操作。
  2. 修改UIImageView+AFNetworking为使用与 RestKit 相同的操作队列,在这种情况下,您设置的优先级将很重要。