2013-07-14 43 views
0

我需要通過HTTP和HTTPS與RESTful服務進行通信。我正在閱讀一些關於通過NSURLConnection類執行異步請求的示例,其中一些使用sendAsynchronousRequest:queue:completionHandler:方法,其他使用connectionWithRequest:delegate:方法並實現NSURLConnectionDelegate方法。我不能清楚地說明每種方法具有哪些影響,如果差別僅在實施中,但性能和結果相同,或者其中一種方法比其他方法更好或更正確...NSURLConnection和異步請求的不同方式

謝謝!

回答

0

有兩個差異通常是關鍵。

  • 首先,兩種方法的返回類型。 [NSURLConnection sendAsynchronousRequest:queue:completionHandler:]返回類型 void這意味着您無法捕獲NSURLConnection,例如在 屬性,所以你失去了一些控制權,即你不能 [NSURLConnection cancel]它。另一方面,[NSURLConnection connectionWithRequest:delegate:]確實將連接返回給您,因此您保留完全控制權。其次,如果你正在下載一個大文件,基於塊的方法 將把數據加載到內存中,並在執行塊 時「傳送」它。假設一個小RESTful的答案,這可能對你很好。 但是,如果你正在下載一個大文件,你可能想把 的輸入數據直接寫入一個文件句柄中,以減少內存消耗量 。爲此,您需要代理方法 [NSURLConnectionDataDelegate connection:didReceiveData:]。不幸的是,在當前的Apple文檔中並不容易鏈接文檔。 如果您將自己設置爲NSURLConnection的委託,那麼將會調用那些 方法。

希望這會有所幫助。