2012-03-01 94 views
1

我正在開發一個帶有XMPPframework的應用程序。當我下載用戶的電子名片(圖片,名字等)時,該應用會阻塞,直到它下載了當時連接的所有人的數據。iphone - 如何防止應用程序在下載數據時被阻止

我需要在第二個線程(我還沒有使用過多線程),以便應用程序能夠響應新的觸摸並在數據下載時顯示活動圖標。

我聽說過Grand Central Dispatch(GCD),但我也聽說過其他方法,你會推薦哪一種?

謝謝。

+3

我想說,如果你是從頭開始寫作,那麼沒有任何理由比其他任何東西都比GCD。它很好地與網絡上的很多示例結合在一起。 – 2012-03-01 16:19:23

回答

1

你可以在第二個線程上做這樣的事情。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    /* your code to download the vCards goes here */ 
    /* if you are explicitly updating a UI element then you would have to perform that on the main thread so you would do something like this */ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    label.text = @"some text"; // or any other code that updates a UI element 
    }); 
}); 

如果你想要做的就是下載電子名片數據在第二線程和分配結果的變量那麼就沒有必要再次調用dispatch_async(),因爲你不執行任何操作在UI元素上。

+0

讓我看看,所以你說第一個塊會下載數據但不顯示它,當所有的數據被下載時,我將執行代碼來顯示第二個塊的圖片,是嗎? – subharb 2012-03-01 17:11:30

+0

這取決於如何編寫代碼以顯示您下載的內容。如果您明確地進行了更新UI的調用,比如說更新標籤的文本或類似內容,那麼在第一個dispatch_async中,您必須放置第二個dispatch_async,並將代碼更新爲該UI中的UI。我會編輯我的答案,試着讓它更清楚些。 – solydest 2012-03-01 17:40:42

相關問題