0

Parseをバックエンド サービスとして使用するために、AFIncrementalStore ですべてをセットアップしました。このようなサービスを使用すると、API リクエストのカウントが重要になります。たとえば、1 か月あたり 100 万リクエストを超えると (成功した指標ではありますが!)、ある程度の請求が発生する可能性があります。これは通常問題にはなりませんが、次のメソッドにブレークポイントを設定すると、次のようになりますAFHTTPClient

- (void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operation;

特定のオブジェクトに対する要求が 3 回発生することがわかりました。必要なのは 1 回だけです。

$1 = 0x0b9afe30 https://api.parse.com/1/classes/Poem/cUpTflj0j8
// ...
$8 = 0x099e0a30 https://api.parse.com/1/classes/Poem/cUpTflj0j8
...
$18 = 0x0bb6d530 https://api.parse.com/1/classes/Poem/cUpTflj0j8

さまざまなメモリ アドレスが から取得されAFHTTPRequestOperationていることに注意してください。プロパティを出力して、各リクエストの (URL の末尾にあるランダムな文字列)request.URLを調べています。objectId

2日間のデバッグと調査の後で、私は の仕組みに十分に慣れていないNSIncrementalStoreか、これを理解することができません。AFIncrementalStore意図的かどうかにかかわらず、これを引き起こしている可能性のあるものについての考えを聞きたいです.

NSFetchedResultsControllerをと一緒に使用していることを付け加えるかもしれませんUITableView。テーブルビューのデータ ソースに対するオブジェクトの最初のリクエストのスタック トレースを追跡しました。他の 2 つの要求は、 の内部メソッドにまでさかのぼりますAFIncrementalStore

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // ...
    NSManagedObject *poem = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = [poem valueForKey:@"title"];  // traced back to here
    // ...
}
4

1 に答える 1

1

オプションは次のように設定できますNSURLCache

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:8 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];

[NSURLCache setSharedURLCache:URLCache];

URLCacheこれにより、 8 MB の RAM と 20 MB のディスク キャッシュを使用してセットアップする必要があります。

これほど多くのリクエストがまだネットワーク上で発生しているかどうかを確認するには、wiresharkcocoapacketanalyserなどのツールを使用してください。

于 2013-05-09T15:27:28.397 に答える