2010-08-23 81 views

回答

3

該文檔沒有說它會緩存,所以我認爲我們應該假設他們不做任何緩存。哪些類型的數據你想獲得

的UIImage:是的,我認爲你應該使用的NSData

視頻:你應該使用的MPMoviePlayerController的流

文字:我想你可以做正常NSUrlConnection。它也有異步,同步和緩存

+0

我需要獲取XML格式的配置文件,我應該使用NSUrlConnection,對不對? – cesarnicola 2010-08-23 15:25:35

+0

是的,我認爲你應該使用NSUrlConnection,並做異步以防止阻止UI – vodkhang 2010-08-23 15:31:29

8

使用ASIHTTPRequest。這是一個第三方的HTTP客戶端庫,使得網絡交互更簡單,並且具有非常好的緩存功能。

更新:剛剛得到這個答案downvote,這是一個很好的提醒回來和更新。 Lot自10年8月以來發生了變化。最值得注意的是:ASIHTTPRequest現在已被棄用,其作者鼓勵人們使用別的東西。 AFNetworking似乎是一種流行的選擇。

+1

用upvote替換我的downvote。顯然,沒有什麼是個人的,我只是不希望人們認爲這仍然是一個好的答案。良好的更新工作。 :) – 2012-02-24 23:15:14

+0

@StevenFisher - 我的SO歷史中我衷心推薦ASIHTTPRequest的場所數量驚人。我指望downvotes幫助我找到他們! – 2012-02-27 18:08:21

+0

您可能需要考慮刪除答案,至少在這種情況下......我認爲您不必回過頭來看看所有內容。 – 2013-04-17 23:57:08

5

最好使用NSURLConnection。你給它的NSURLRequest可以配置爲按照你想要的方式進行緩存,但是默認情況下,它只會對響應中包含相應標題的HTTP資源執行標準緩存。

這是我做的:

NSData *data = [NSURLConnection sendSynchronousRequest: 
       [NSURLRequest requestWithURL:url] 
            returningResponse:nil 
               error:&error]; 

請務必把這個在NSOperationQueue這不是你的主隊列或以其他方式爲主線卸載它,但。或者,使用異步請求。

+1

這對我有用。 – razorhead 2015-03-09 13:51:41

-1

如果你需要的只是從url下載圖片,不用費心去使用任何庫,只需一個簡單的dispatch_async調用就可以。像這樣:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) 
{ 
    NSData * data = [NSData dataWithContentsOfURL:imageUrl]; 
    dispatch_async(dispatch_get_main_queue(), ^(void){ 
     self.image = [UIImage imageWithData:data]; 
    }); 
}); 
+1

問題是圖像沒有被緩存,所以如果相同的圖像在很多地方被重用,這種方法是網絡繁重的。 – 2016-08-08 02:37:52

5

看來,iPhone5s的默認策略是緩存(unlinke iPhone5及更早版本)。

您可以通過選項參數處理NSData的緩存策略。例如,如果你想避免緩存,可以使用下面的剪輯:

[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil]; 
相關問題