开发者

Async Images Download in a Table

I have a table view and I'd like to download an icon image (100x75) to each row asynchronously. I've followed many tutorials so far but I can't seem to figure it out. How should I do it?

Does anyone rec开发者_JAVA百科ommend just doing it using the standard NSURLConnection API or should I use one of those classes/libraries that are available online to do so? If so, what do you recommend?

Of course, I need it to be fast, efficient and does not leak. I also don't want the downloading to affect the scrolling.

Thank you!


Two options I can think of:

(1) Use ASIHTTPRequest.

(2) A custom implementation that spawns a thread in which you load the image using a combination of NSURL/NSData. Once the image is loaded, send it to a method on the main UI thread using performSelectorOnMainThread:withObject:.

NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(loadImage:) object:nil];
[t start];
[t release];

-(void) updateImage:(id) obj {
  // do whatever you need to do
}

-(void) loadImage:(id) obj {

  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  NSURL *url = [NSURL URLWithString:@"imageurl"];
  NSData *imageData = [[NSData alloc]initWithContentsOfURL:url]; 
  UIImage *image = [UIImage imageWithData:imageData];
  [imageData release];

  [self performSelectorOnMainThread:@selector(updateImage:) withObject:data waitUntilDone:YES];  
  [pool release];

}


I'd recommend you using ASIHTTPRequest. Its simple and pretty fast.
Here is a link to the documentation - ASIHTTPRequest

EDIT

You need to download images for visible cells only. Heres a sample:

- (void)loadContentForVisibleCells
{
    NSArray *cells = [self.tableView visibleCells];
    [cells retain];
    for (int i = 0; i < [cells count]; i++) 
    { 
        ...
        // Request should be here
        ...
    }
    [cells release];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
{
    if (!decelerate) 
    {
        [self loadContentForVisibleCells]; 
    }
}

Anyway u'll need to code a lot to make things work good and fast.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜