以下のコードは、ASIで使用したものとほぼ同じですが、現在はAFNetworkingを使用しています。私の推測では、メインスレッドでsuccessブロックを実行しているため、低速です。successCallbackQueueを新しいキューに設定しようとしましたが、機能していないようです。それは非常に遅く、これを効率的に行いません。どうすれば高速化できますか、またはバックグラウンドスレッドで実行されていることを確認できますか?
#define kPerPage 10
- (void) pullData {
NSURL *url = [API homeRecentUrlWithPage:self.currentRecentPage limit:kPerPage];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
dispatch_queue_t requestQueue = dispatch_queue_create("requestQueue", NULL);
AFJSONRequestOperation *operation;
operation.successCallbackQueue = requestQueue;
operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSArray* modelArray = [JSON objectForKey:@"models"];
for (int i = 0; i < [modelArray count]; i++)
{
Model *b = [Model alloc];
b = [b initWithDict:[Model objectAtIndex:i]];
[self.otherArray addObject:b];
}
[_modelTable reloadData];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"%@", [error userInfo]);
}];
[operation start];
}
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString* identifier = @"ModelTableCell";
cell = (ModelTableCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[ModelTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
cell.selectionStyle = UITableViewCellAccessoryNone;
}
if([indexPath row] == (self.currentRecentPage-1) * kPerPage + 5) {
NSLog(@"%d aaa", self.currentRecentPage);
self.currentRecentPage++;
[self pullData];
}
Model *b = [self.models objectAtIndex:[indexPath row]];
[cell populateWithModel:b];
return cell;
}