TableView慢速滚动

时间:2014-03-03 14:09:43

标签: ios performance scroll tableview

我正在开发iOS应用程序和我的UITableView有点慢。我想知道慢滚动的所有可能原因。 请注意,我在故事板中使用了原型单元格,但我没有任何图像。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:identifier];

    Classification *classification = [classifications objectAtIndex:indexPath.row];
    UILabel *teamLabel = (UILabel *) [cell viewWithTag:101];
    [teamLabel setText:[classification team]];
    [cell setBackgroundColor:[UIColor clearColor]];
    return cell;

}

此外,它在模拟器中运行顺畅。 我正在使用iPad 2。

1 个答案:

答案 0 :(得分:0)

在您的

中异步下载数据
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

使用2个独立的UITableViewCell对象,一个用于填充文本数据,一个用于需要在线程中的图像,例如dispatch_async,例如来自我的项目:

if (imageUrl.length > 0)
        {
            NSString *completeURL = @"";
            completeURL = [completeURL stringByAppendingString:kPROFILE_IMAGE_URL];
            completeURL = [completeURL stringByAppendingString:@"/2/"];
            completeURL = [completeURL stringByAppendingString:imageUrl];
            completeURL = [completeURL stringByAppendingString:@".png"];

            NSString *fileName = [NSString stringWithFormat:@"%@.png", imageUrl];
            NSString* path = GetMediaFolder();
            BOOL imageExists = [[NSFileManager defaultManager] fileExistsAtPath:[path stringByAppendingPathComponent:fileName]];

            if (imageExists)
            {
                // NSLog(@"Image exists");
                // Update UI

                dispatch_async(dispatch_get_main_queue(), ^
                {
                    UITableViewCell *updateCell = (id)[tableView cellForRowAtIndexPath:indexPath];

                    UIImageView *imageView = (UIImageView*)[updateCell viewWithTag:kTAG_IMAGE];
                    imageView.image=[UIImage imageWithContentsOfFile:[path stringByAppendingPathComponent:fileName]];
                    imageView.layer.cornerRadius = 23.0;
                    imageView.layer.borderColor = (__bridge CGColorRef)([UIColor clearColor]);
                    imageView.layer.borderWidth = 1.0;
                    imageView.clipsToBounds = YES;
                    imageView.contentMode = UIViewContentModeScaleAspectFill;

                    [updateCell setNeedsLayout];
                });
            }
            else
            {
                // NSLog(@"Image not exists");
                // Download The Image

                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
                {
                    NSURL *imageURL=[NSURL URLWithString:completeURL];
                    NSData *image=[NSData dataWithContentsOfURL:imageURL];
                    [image writeToFile:[path stringByAppendingPathComponent:fileName] atomically:YES];

                    // Update UI
                    dispatch_async(dispatch_get_main_queue(), ^
                    {
                        UITableViewCell *updateCell = (id)[tableView cellForRowAtIndexPath:indexPath];

                        UIImageView *imageView = (UIImageView*)[updateCell viewWithTag:kTAG_IMAGE];
                        imageView.image=[UIImage imageWithContentsOfFile:[path stringByAppendingPathComponent:fileName]];
                        imageView.layer.cornerRadius = 23.0;
                        imageView.layer.borderColor = (__bridge CGColorRef)([UIColor clearColor]);
                        imageView.layer.borderWidth = 1.0;
                        imageView.clipsToBounds = YES;
                        imageView.contentMode = UIViewContentModeScaleAspectFill;

                        [updateCell setNeedsLayout];
                    });
                });
            }
        }
    }
    return cell;

编辑1:

我发现你不使用图像,你仍然需要异步下载所有数据,并在下载完成后填入新的UITableViewCell(而不是我的图像下载,临时数据和下载的数据)。 / p>