一千萬個為什麽

搜索

如何在不舉起其他內容的情況下下載圖像?

我正在制作一個應用程序,允許您瀏覽網站上的圖片。我目前正在使用以下方式下載圖像:

 UIImage *myImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]];

這很好用,但可能很耗時。我開始下載20張圖片,但是直到30秒左右下載所有圖片之後我才能做任何事情。

這一次等待並不是那麽糟糕,但如果我想下載第二十四張圖像,我將不得不再等30秒。

基本上,有沒有一種方法可以一次下載這些圖像,而無需保留任何動畫?

謝謝。

最佳答案

當然,將下載任務放在一個線程中,並使用回調讓您的程序知道每個圖像何時完成。然後,您可以在完成加載時繪制圖像,而不是占用應用程序的其余部分。 此鏈接有一個模板,您可以將其用作一個例子。

這是一個快速而骯臟的例子:

- (void)downloadWorker:(NSString *)urlString
{
    NSAutoreleasePool *pool  = [[NSAutoreleasePool alloc] init];
    NSURL             *url   = [NSURL URLWithString:urlString];
    NSData            *data  = [NSData dataWithContentsOfURL:url];
    UIImage           *image = [[UIImage alloc] initWithData:data];

    [self performSelectorOnMainThread:@selector(imageLoaded:) 
                           withObject:image
                        waitUntilDone:YES];
    [image release];
    [pool drain];
}

- (void)downloadImageOnThread:(NSString *)url
{
    [NSThread detachNewThreadSelector:@selector(downloadWorker:) 
                             toTarget:self 
                           withObject:url];
}

- (void)imageLoaded:(UIImage *)image
{
   //get the image into the UI
}

為每個要加載的圖像調用 downloadImageOnThread ,每個圖像都會獲得自己的線程,並且每個完成時都會調用 imageLoaded

轉載註明原文: 如何在不舉起其他內容的情況下下載圖像?