2012-03-01 84 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

相关问题