2011-07-25 385 views
0

我有一個表視圖,我想異步下載一個圖標圖像(100x75)到每一行。到目前爲止,我已經遵循了許多教程,但我似乎無法弄清楚。我應該怎麼做?異步圖像下載表

有沒有人推薦使用標準的NSURLConnection API來做它,或者我應該使用其中一種可在線使用的類/庫嗎?如果是這樣,你推薦什麼?

當然,我需要它快速,高效,不泄漏。我也不希望下載影響滾動。

謝謝!

回答

0

我建議你使用ASIHTTPRequest。它簡單而快速。
下面是對文件的鏈接 - ASIHTTPRequest

編輯

您需要下載圖片,只可見單元格。 繼承人的樣本:

- (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]; 
    } 
} 

反正日子會把你需要編寫了很多,使事情工作又好又快。

+0

是啊我在我的應用程序中使用ASIHTTPRequest來處理其他事情 - 但是如何有效地將它用於表格視圖中的圖像?不確定 - 嘗試閱讀http://kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/,但是當我運行它時,他的應用程序不起作用,它使用Core對於我所需要的動畫太複雜了。解碼他的代碼會花費更多的時間。 – darksky

1

兩個選項,我能想到的:

(1)使用ASIHTTPRequest

(2)自定義實現會生成一個線程,您可以在其中使用NSURL/NSData的組合加載圖像。加載圖像後,使用performSelectorOnMainThread:withObject:將其發送到主UI線程上的方法。

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]; 

} 
+0

我認爲對錶中的圖像進行線程化並不是一個好主意。至於ASIHTTPRequest,我用它在我的應用程序中的其他東西 - 但你如何有效地將它用於表視圖中的圖像?不知道 - 嘗試閱讀kosmaczewski.net/2009/03/08/...但他的應用程序不工作,當我運行它,它使用核心動畫變得太複雜,我所需要的。解碼他的代碼會花費更多的時間。 – darksky

+0

@Nayefc - 你有什麼擔心?我沒有使用ASIHTTPRequest,或者查看它的源代碼,但是如果它沒有啓動某種後臺線程來異步加載資源,我會感到驚訝。 – csano

+0

我並不確定如何使用ASIHTTPRequest(或者精確的方法)來實現我想要的表格視圖。我知道如何在沒有表格的情況下使用它,但是一張表格(滾動)使事情變得更加棘手。 – darksky