AFNetworking に問題があります。これを使用して、GET経由でサーバーから多くのJSONデータをリクエストしています:
[[SessionResponseClient sharedClient] getPath:kURIRateList parameters:@{...} success:^(AFHTTPRequestOperation *operation, id JSON) {
[_delegate receivedRateResponse:JSON];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[_delegate receivedRateResponse:nil];
}];
これが約 10 ~ 20 回呼び出されると、CFData がアプリの使用メモリの大部分を占めるようです。
メモリ使用量
CFData と CFData (ストア) の両方を調べると、次の結果が得られます。
CFData (ストア)
CFデータ
補足: 私のアプリは ARC を使用していますが、それ以外はすべて正常に動作しているようです。
私の質問は、AFNetworking の GitHub ページで保留中の問題が見られず、インターネット上でそれに関する他の苦情がほとんど見られなかったので、一体何が間違っているのでしょうか? 他の誰かがこの問題に直面していますか、それとも私だけですか? 私のコードが間違っているとは思わないので、コードを投稿してください...
更新 1
インターフェイスのコード:
@protocol RateRequestsDelegate;
@interface RateRequests : NSObject {
id<RateRequestsDelegate> _delegate;
}
@property (nonatomic, strong) id<RateRequestsDelegate> delegate;
- (void)fetchRateList;
@end
@protocol RateRequestsDelegate <NSObject>
- (void)receivedRateResponse:(NSDictionary *)response;
@end
すべての AFNetworking の例が示すように、SessionResponseClient は単なる拡張された AFHtttpClient インスタンスです。以下を参照してください: API との対話
receivedRateResponse のコード:
- (void)receivedRateResponse:(NSDictionary *)json {
if (!json) {
return;
}
self.moviesToInsert = [NSMutableArray arrayWithArray:[json objectForKey:@"rated"]];
[self.tableView reloadData];
}
更新 2
デリゲートを使用する代わりにコールバックをブロックベースの関数に変更したところ、少し改善されましたが、ほとんど言及できず、他の何かの副作用によって引き起こされる可能性もあります。皆さんはこれをどのように実装しますか?データをフェッチしてテーブルまたはスクロールビューに表示し、サーバーからこれらのデータを何度もプルしてビューを更新してみてください
どうもありがとう!ポール