5

RKObjectRequestOperationを作成して RestKit のキューに追加することで、RestKit でデータをダウンロードしています。

RKObjectRequestOperation *operation = [RK objectRequestOperationWithRequest:request
       success:...
       failure:...];
[RK enqueueObjectRequestOperation:operation];

それはうまくいきます。さらに、このデータは、関連するユーザー アイコンを表示する UIImageViews を含むリスト ビューに表示されます。ただし、これらのユーザー アイコンは、RestKit 経由ではなく、基礎となる AFNetworking ライブラリ経由でダウンロードされます。UIImageView+AFNetworking もかなりうまく機能します (キャッシュを含む):

[self setImageWithURLRequest:userIconRequest
            placeholderImage:anonymousUser
                     success:nil
                     failure:...];

問題は、画像ビューからの 15 個のユーザー アイコン リクエストが、次のページをすぐにロードする必要がある RestKit リクエストの処理をブロックすることです。「読み込み中」行と最初のユーザー アイコンを表示するリストが表示されます。最後の画像の読み込みが完了した瞬間に、次のページが追加されます。

UIImageView+AFNetworking の実装を調べると、リクエストをシリアル化する独自の NSOperation キュー インスタンスを使用していることがわかります。ただし、それはRestKitに干渉するべきではないと思います。

また、すべてのリクエストに s を追加NSOperationQueuePriorityしても、何も変わりません。おそらく内部的に、ネットワーク リクエストは別の方法でシリアル化されますか? それらのリクエストに優先順位を付けるにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

0

NSURLConnection文書化されていない最大接続数があります。

さらに、UIImageView+AFNetworkingのオペレーション キューにはNSOperationQueueDefaultMaxConcurrentOperationCount最大の現在のリクエストがあります。この説得力のある AFNetworking の議論によると、これはユース ケースにとっておそらく悪い選択です。

スロットルする必要があります。2 つの簡単な解決策があります。

  1. UIImageView+AFNetworkingたとえば、最大同時操作数が 4 になるように変更します。
  2. RestKitUIImageView+AFNetworkingと同じ操作キューを使用するように変更します。この場合、設定した優先度が重要になります。
于 2014-02-01T00:29:49.250 に答える