2010-08-18 59 views
5

什麼是一種體面的方式來按需加載UIImages而不阻塞主線程?延遲從文件中加載UIImages而不阻塞主線程?

背景:我可以在牆上滾動幾千張圖片。顯然,加載所有UIImage是不可行的,所以現在我只是懶加載正在顯示的那些UIImage,然後在不再需要時將它們釋放。問題是從文件加載UIImages需要很長時間,只是足夠長的時間才能在滾動時造成口吃。這些絕不是大圖像(大約250x250,也許每個20-30kb),但它們仍然會導致口吃。

回答

0

我使用自定義的UIImageView子類來做類似的事情。它主要用於下載圖像(例如,在twitter流中考慮化身和圖像),因此它使用NSURLConnection從URL下載圖像。然後,URLConnection在完成時調用委託方法,然後使用它更新UIImageView。 我稍後添加的額外內容是一個帶有緩存圖像的靜態字典,因此更經常使用的圖像不必每次都下載。這對於像前面提到的twitter頭像那樣的東西非常有用。

我不知道,如果你嘗試加載從網頁或本地的圖像,所以這可能並不完全適用於您的情況,但我希望這有助於...

0

你可以非常做到這一點簡單的方法。首先在創建一個UIScrollView對象時創建一個隊列。 創建後,您可以使用剛剛創建的隊列從本地存儲裝載圖像。

//get a dispatch queue 
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 


//this will start the image loading in bg 
dispatch_async(concurrentQueue, ^{   
    NSData *image = [[NSData alloc] initWithContentsOfURL:imageURL]; 

    //this will set the image when loading is finished 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     imageView.image = [UIImage imageWithData:image]; 
    }); 
});