我已经使用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
的工作方式不够熟悉,经过两天的调试和检查后才弄清楚这一点。我很想听听有关可能造成这种情况的任何想法,无论是有意还是无意。
我可能会补充说我正在使用NSFetchedResultsController
和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
// ...
}
答案 0 :(得分:1)
选项可能是设置NSURLCache
,如此:
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:8 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
这应该使用8 MB RAM和20 MB磁盘缓存设置URLCache
。
要检查线路上是否还有这么多请求,可以使用wireshark或cocoapacketanalyser等工具。