2013-04-30 34 views
1

這兩條線佔我應用程序整個加載時間的40%和42%(共84%)。我用儀器進行了測試。dataWithContentsOfURL和imageWithData佔整個加載時間的84%

NSData *storeImageData = [NSData dataWithContentsOfURL:storeImageURL]; //40% whole load time 
UIImage *storeImage = [UIImage imageWithData:storeImageData]; //42% whole load time 

是否有另一種/更好的方法來加快我的應用程序的加載時間?這兩行和更多的代碼在一個循環中將循環大約500次。

注意
在向通常的「www.blah.net」添加「http://」後,它開始變慢。有誰知道爲什麼URL中的7個字符(大約30-50)會大大減少加載時間。在我改變它之前,它花了3秒鐘。現在37秒。

+2

加載它異步......這不是真正的速度更快,但用戶界面不會被阻止,您可以顯示進度條 – HAS 2013-04-30 14:22:58

+0

@HAS你有樣品給我嗎?我並沒有忙於緩存。每個圖像大約16kb。 – CTSchmidt 2013-04-30 14:46:18

+1

您是從自己的服務器上加載一組固定的圖像嗎?如果是這樣,下載一個包含所有圖像的單個大型zip文件比下載500個單獨圖像要快很多。更好的是,將它們包含在應用程序中。在任何一種下載的情況下,絕對要在後臺下載。 – rmaddy 2013-04-30 15:03:26

回答

4

這些替換你的線條,

__block NSData *storeImageData; 
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, NULL); 
dispatch_async(queue, ^{ 
    //load url image into NSData 
    storeImageData = [NSData dataWithContentsOfURL:storeImageURL]; 

    dispatch_sync(dispatch_get_main_queue(), ^{ 
     //convert data into image after completion 
     UIImage *storeImage = [UIImage imageWithData:storeImageData]; 
     //do what you want to do with your image 
    }); 

}); 
dispatch_release(queue); 

如需進一步信息,請參閱dispatch_queue_t

+0

問題是我的放置引腳現在比圖像更快。所以我的引腳被創建,並且'storedImage'爲'nil'。但是對你的代碼非常肯定的是圖像的加載速度比以前快了5倍。我認爲最好的辦法是寫一些類似「嘿,沒有圖像等待它,你可以通過圖像加載後」或類似的東西。你有好主意嗎? – CTSchmidt 2013-04-30 15:37:54

+1

好吧,你可以最初加載並放置一個虛擬的圖像,像「圖像加載」,從捆綁和刷新後:) – x4h1d 2013-04-30 22:18:13