0

我已经使用 AFIncrementalStore 设置了所有内容,以使用Parse作为后端服务。使用这样的服务使计算 API 请求变得很重要,就好像我每月超过 1MM 请求(尽管是一个成功的指标!)可能会产生一些不错的账单。这通常不会是一个问题,但我所看到的是,如果我在以下方法中放置一个断点AFHTTPClient

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

我发现对特定对象的请求发生了 3 次,而我只需要一次。

$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,我正在打印request.URL属性以检查objectId每个请求的(URL 末尾的随机字符串)。

现在我对它的工作原理还不够熟悉,NSIncrementalStore或者AFIncrementalStore经过两天的调试和检查后弄清楚了。我很想听听有关可能导致这种情况的任何想法,无论是有意还是无意。

我可能会补充一点,我正在使用 aNSFetchedResultsController和 a UITableView。我将对象的第一个请求的堆栈跟踪跟踪到我的 tableview 的数据源。其他 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 磁盘缓存。

要检查网络上是否还有这么多请求,可以使用诸如wiresharkcocoapacketanalysisr 之类的工具。

于 2013-05-09T15:27:28.397 回答