iphone - 如何防止应用程序在下载数据时被阻止[关闭]
Posted
技术标签:
【中文标题】iphone - 如何防止应用程序在下载数据时被阻止[关闭]【英文标题】:iphone - How to prevent app to block while downloading data [closed] 【发布时间】:2012-03-01 16:16:21 【问题描述】:我正在使用 XMPPframework 开发应用程序。当我下载用户的电子名片(图片、姓名等)时,应用程序会阻塞,直到它下载了当时所有连接的人的数据。
我需要将它放在第二个线程中(我还没有使用多线程),以便应用程序响应新的触摸并在下载数据时显示一个活动图标。
我听说过 Grand Central Dispatch (GCD),但我也听说过其他方式,您会推荐哪种方式?
谢谢。
【问题讨论】:
我想说,如果您是从头开始编写,那么除了 GCD 之外,没有理由使用其他任何东西。它与网络上的许多示例很好地集成在一起。 【参考方案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
);
);
如果您只想在第二个线程中下载 vCard 数据并将结果分配给变量,则无需第二次调用 dispatch_async(),因为您没有对 UI 元素执行任何操作。
【讨论】:
让我看看,所以你是说第一个块将下载数据但不显示它,当所有数据下载完毕后,我将执行代码以显示第二个块的图片,对吗? 这取决于您的代码如何编写以显示您下载的内容。如果您正在显式进行更新 UI 的调用,例如更新标签的文本或类似的内容,那么您必须在第一个 dispatch_async 中放置第二个 dispatch_async,并将您的代码放入其中以更新 UI。我将编辑我的答案以尝试使其更清晰。以上是关于iphone - 如何防止应用程序在下载数据时被阻止[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Swift:如何防止未显示的 UITableViewCells 在滚动时被关闭
如何防止我的 iPhone 应用程序在 iPad 上下载? [复制]