当UITableView在其UIBlocked的单元格上添加多个NSURL UIImage时,如何减少时间

时间:2013-08-23 11:28:16

标签: ios uitableview uiimage nsdata

我正在尝试将互联网上的图像加载到单元格中。

当我使用单行时,它不会花费太多时间,但是当我有超过5行时,它会阻止UI。我该如何解决这个问题?

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

在这种方法中:我正在使用该代码:

NSURL *url = [NSURL URLWithString:upcImageLink];
NSData *data = [NSData dataWithContentsOfURL: url];
UIImage *imageObj = [[UIImage alloc] initWithData:data];
[iconImgVw setImage:imageObj];

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您目前正在进行同步调用以下载tableview单元格图像。同步通话需要时间,您的屏幕/ UITableView对触摸事件无响应。避免这种情况的技术称为延迟加载。

使用SDWebImage延迟加载tableview图像。用法很简单,

#import <SDWebImage/UIImageView+WebCache.h>

...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:MyIdentifier] autorelease];
    }

    // Here we use the new provided setImageWithURL: method to load the web image
    [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    cell.textLabel.text = @"My Text";
    return cell;
}

或者,您也可以自己实施延迟加载图片,引用Apple sample code

希望有所帮助!

答案 1 :(得分:0)

请通过替换url来尝试以下代码:

dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^(void)
    {
        NSData * data = [[[NSData alloc] initWithContentsOfURL:URL] autorelease];
        UIImage * image = [[[UIImage alloc] initWithData:data] autorelease];
        dispatch_async( dispatch_get_main_queue(), ^(void){
            if( image != nil )
            {
                [iconImgVw setImage:image];
            } else {
                //error
            }
        });
    });