2013-08-23 28 views
3

我想从互联网加载到单元格的图像。如何减少时间UITableView添加多个NSURL UIImage UIBlocked的单元格

当我使用单个行时,它不需要太多时间,但是当我有多于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

如果我理解正确,您目前,使得同步调用下载的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图像的延迟加载。

希望有帮助!

+0

感谢所有帮助我。 –

+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 
      } 
     }); 
    }); 
相关问题