2011-07-24 42 views
0

我通過一些例子NSURLConnection的看着,並且都評爲異步相關的,雖然我沒有看到創建的任何操作隊列/線程/調度。 我很想知道 - NSURLConnection是否總是異步執行請求,或者你必須爲它設置一些特殊的東西?是否所有NSURLConnections都異步連接? IOS

回答

1

NSURLConnection的可以根據你所說的方法來進行實際連接,一旦你分配的NSURLConnection的實例(或使用類方法)同步或異步模式下運行。

對於同步連接,可以使用方法:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error

對於異步連接,使用的方法:

+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id <NSURLConnectionDelegate>)delegate

- (id)initWithRequest:(NSURLRequest *)request delegate:(id <NSURLConnectionDelegate>)delegate

- (id)initWithRequest:(NSURLRequest *)request delegate:(id <NSURLConnectionDelegate>)delegate startImmediately:(BOOL)startImmediately

- (void)start

我建議你閱讀蘋果文檔上NSURLConnection瞭解更多信息,並查看示例代碼

+0

謝謝你的快速回復:) 我已閱讀NSURLConnection的參考和指導,但我發現它由於代碼未滿,因此很不清楚。 另外一個問題 - 當使用異步連接,我應該在主運行的循環運行,直到我收到了DidFinishLoading消息,對不對? – Niv

+0

您可以在主運行循環上啓動連接,因爲實際連接將在新線程中完成。當連接完成後,如果您將類設置爲我看到的代理 –

+1

,它會調用您的委託方法。 是否有任何版本的可用於iOs的sendAsynchronousRequest?因爲我只在Mac OS X引用中看到它,而不是ios。 另外 - 我試着創建一個連接並等待它來調用這些消息,但由於某種原因它們並沒有被髮送。當我在當前運行循環中運行代碼直到完成時,就會發送消息。這個問題很奇怪,因爲我認爲委託被連接保留,因此在連接完成/取消/失敗之前不應該被釋放(如果確實如此)。 – Niv