3

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

当我使用单行时,它不会花费太多时间,但是当我有超过 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];
4

2 回答 2

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 示例代码自行实现图像的延迟加载。

希望有帮助!

于 2013-08-23T11:31:39.330 回答
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
            }
        });
    });
于 2013-08-23T12:04:50.990 回答