簡體   English   中英

iPhone上的同步NSURLConnection線程

[英]Synchronous NSURLConnection Threading on iPhone

我開始使用異步,但是要獲得返回的數據變得很麻煩。 然后,我開始使用類方法,我認為這排除了使用委托方法的可能性。 因此,我一直保持同步,因為知道這將是一個問題,但我認為解決方案不會遇到太大困難。 在保持UI交互性的同時檢索數據的最佳方法是什么?

NSURLConnection同步調用應該能夠被卡在后台線程中,但是我強烈建議您處理“麻煩”,然后執行“正確的方式”。 在保持UI交互性的同時檢索數據的最佳方法是使用NSURLConnection的異步方法。

同步NSURLConnections在NSOperation內部非常有效-並且因為您正在同步使用它們,所以遞給NSOperations的NSOperationQueue將自動使用后台線程來運行它們(否則,您必須做額外的工作)。

使URL連接在后台線程中運行是保持UI響應能力的關鍵,這是異步NSURLOperation默認情況下不執行的操作(請查看所有數據回調都位於哪個線程上)。

有時您想處理傳入的數據(例如,如果有進度條),在這種情況下,異步URL連接更好,它們仍然可以處於NSOperation中。

因為這讓您感到沮喪,所以您可能想看看同樣基於NSOperation的替代ASIHTTPRequest庫,但是看起來這可能會使其中的一些麻煩(他們有很好的示例代碼):

http://allseeing-i.com/ASIHTTPRequest/

出於興趣,您在獲取數據時遇到什么問題? 我發現使用異步NSURLConnection和NSNotificaion可以解決問題,非常方便。

在需要數據的類中(我通常將其放在init方法中)

-(id)init{
    ... object setup ...
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView) name:@"ScanCompleted" object:nil];
}

updateView是連接完成接收數據后要調用的方法

在NSURLConnection中

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

//Notify that we are finished
[[NSNotificationCenter defaultCenter] postNotificationName:soapAction object:self];

}

這對我來說很好用-NSURLConnection是線程化的,因此UI不會鎖定,並且在數據下載完成后會更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM