reuseCellIdentifier を使用し、画像 (UIImageView+AFNetworking.h を使用して非同期にダウンロード) を含む UITableView があります。しばらくスクロールした後やテーブルが長くなると、予想どおり動作が遅くなります。また、インターネットからダウンロードした各セルのデータを に保存するNSMutableArray *_collection
ので、セルが表示されるたびに再ダウンロードし続けることはありません。
私の問題は、次の方法を使用してテーブルを完全に更新した後でも、スクロールが非常に遅いことです。再びスムーズにロードする唯一の方法は、アプリを終了して再度開くことです。リロード後もスクロールが遅い理由がわかりません... ARCを使用していて、リークのプロファイルを作成しましたが、テーブルをリロードしても何も表示されません..
-(void)refreshTable:(id)sender{
[_collection removeAllObjects];
_collection = nil;
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:_baseURL]];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:_path parameters:nil];
AFJSONRequestOperation *operation = [AFJSONRequestOperation ...etc...
さらに一歩進んで、次のように更新時にテーブルビューを削除しようとしましたが、どちらも役に立ちません...
-(void)refreshTable:(id)sender{
[_tableView removeFromSuperView];
_tableView = nil;
_tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
[_tableView setDelegate:self];
[_tableView setDataSource:self];
[_tableView setRowHeight:kRowHeight];
[_tableView setBackgroundColor:[UIColor clearColor]];
[_tableView setSeparatorColor:[UIColor clearColor]];
[_tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[self.view addSubview:_tableView];
[_collection removeAllObjects];
_collection = nil;
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:_baseURL]];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:_path parameters:nil];
AFJSONRequestOperation *operation = [AFJSONRequestOperation ...etc...
テーブルを更新した後もスクロールが遅い理由は何ですか? ありがとう!
編集
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = (CustomCell*)[theTableView dequeueReusableCellWithIdentifier:kCustomCellId];
if (cell == nil)
{
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = (CustomCell*)[topLevelObjects objectAtIndex:0];
}
[self populate:cell atIndexPath:indexPath];
[self loadImageForCell:cell];
return cell;
}
- (void) populate:(UITableViewCell*)customCell atIndexPath:(NSIndexPath*)indexPath
{
CustomCell *cell = (CustomCell*)customCell;
if (indexPath.row % 2) {
[cell.background setImage:[UIImage imageNamed:@"CellBgYellow"]];
} else {
[cell.background setImage:[UIImage imageNamed:@"CellBgOrange"]];
}
DataObject* thisDataObject = [_collection objectAtIndex:indexPath.row];
cell.dataObject = thisDataObject;
cell.titleLabel.text = [thisDataObject objectForKey:kCellTitle];
cell.timestampLabel.text = [thisDataObject objectForKey:kCellTimestamp];
}
- (void) loadImageForCell:(CustomCell*)cell
{
[cell.profilePic setImage:nil];
NSString* profilePicURL = [cell.dataObject objectForKey:kCellProfilePicURL];
NSString* URL = [NSString stringWithFormat:@"%@%@", kBaseURL, profilePicURL];
NSMutableURLRequest *profilePicRequest = [NSMutableURLRequest requestWithURL:[[NSURL alloc] initWithString:URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
[profilePicRequest setHTTPShouldHandleCookies:NO];
[cell.profilePic setImageWithURLRequest:profilePicRequest
placeholderImage:nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
NSLog(@"loadimageforcell error (%d): %@",error.code,error.localizedDescription);
}];
[cell.painting setImage:nil];
NSString* paintingURL = [cell.dataObject objectForKey:kCellPaintingURL];
URL = [NSString stringWithFormat:@"%@%@", kBaseURL, paintingURL];
NSMutableURLRequest *paintingRequest = [NSMutableURLRequest requestWithURL:[[NSURL alloc] initWithString:URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
[paintingRequest setHTTPShouldHandleCookies:NO];
[cell.spinner startAnimating];
[cell.painting setImageWithURLRequest:paintingRequest
placeholderImage:nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
[cell.spinner stopAnimating];
[cell.spinner removeFromSuperview];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
NSLog(@"loadimageforcell error (%d): %@",error.code,error.localizedDescription);
[cell.spinner stopAnimating];
[cell.spinner removeFromSuperview];
}];
}