0

我在我的應用程序中使用NSURLConnection進行下載。它工作正常。當我開始連接代表方法第五個NSURLConnection的代理不叫

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse*)response 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connectionDidFinishLoading:(NSURLConnection*)connection 

被調用。

但是,當連接的數目變得更多然後4然後爲第五連接委託方法不調用,直到委託方法connectionDidFinishLoading被調用任何前四個連接的(指任何四個連接中的一個具有完成)。然後第五個連接的代表(didReceiveResponsedidReceiveData)開始被調用。簡而言之,我的NSURLConnection是委託方法,一次只能調用4個連接。

我只是想知道有沒有什麼辦法可以增加這個限制,讓更多的4(可能是8或9)連接的代表一次被調用?這是iOS的限制或我的應用程序有問題。

+0

您是否在多臺服務器上測試了這一點,並且使用了不同的網絡基礎設施(不同的LAN和ISP等)? – trojanfoe

+0

我會建議你使用[AFNetworking](https://github.com/AFNetworking/AFNetworking)而不是'NSURLConnection'。我認爲這會讓你的生活更輕鬆。 – rob180

回答

0

我認爲你應該安排這些連接到手動創建的隊列以外的默認的,以避免潛在的影響。這對我來說很有用。以下是您可以嘗試的示例代碼:

NSURLRequest *request; // a URL request 
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // manual create queue to schedule your URL connections 
queue.maxConcurrentOperationCount = 10; // configure the max count 

// by specifying NO for the #startImmediately# parameter, 
// you can schedule an connection on the queue you like before it starts. 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; 
[connection setDelegateQueue:queue]; 
[connection start]; 

希望這會對您有所幫助。

+0

這沒有幫助。根據定義,操作隊列中的併發操作數量只能減少在隊列中運行的併發NSURLConnection請求的數量,而不會增加它。 – dgatwood

+0

沒關係。我誤解了這一點,並認爲你在操作隊列中使用了一種與同步請求不同的(可怕的)技術。你的方法*可能會工作。使用NSURLSession仍然可能會更好,它不僅可以提供這種支持,而且實際上是由Apple記錄的。 :-) – dgatwood

0

你不能用NSURLConnection(實際上)修復它,但如果你使用NSURLSession代替,你可以平凡地解決這個問題。

NSURLSession API允許您控制每個服務器的最大併發請求數。只需在會話配置對象上設置HTTPMaximumConnectionsPerHost屬性,然後根據該配置創建會話,然後在該會話內創建任務,就像創建NSURLConnection對象一樣。