首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCD返回主线程

GCD返回主线程
EN

Stack Overflow用户
提问于 2012-04-06 04:52:11
回答 1查看 1.5K关注 0票数 3

在我的应用程序中,我使用NSXMLParser从几个(6-10)个网站加载信息,然后将信息加载到视图中。

现在,我的应用程序已经设置好了,这样它就可以在主视图控制器中遍历viewDidLoad中的站点,并在我创建的后台线程中加载它们。它在后台线程中这样做,这样用户就不必等待所有站点在加载视图之前加载。

代码语言:javascript
复制
for (NSMutableDictionary *dict in self.sitesArray) {
    SiteData *data = [[SiteData alloc] init];
    [data setDelegate:self];
    dispatch_async(backgroundQueue, ^(void) {
        [data loadSite:[dict objectForKey:@"SiteName"]];
    });

}

在SiteData中,我使用NSXMLParser加载站点(所有委托方法也都正确地实现)

代码语言:javascript
复制
-(void)loadSite:(NSString *)site{
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[self fullURLForSiteName:site]];
    [parser setDelegate:self];
    [parser parse];
    return;
}

当NSXMLParser完成文档并用站点的数据填充SiteData实例时,它将自己传递给主线程上的主视图控制器中的一个方法。

代码语言:javascript
复制
- (void)parserDidEndDocument:(NSXMLParser *)parser{    
    dispatch_async(dispatch_get_main_queue(), ^(void) {
         [delegate successfullyLoadedSite:self];
    });
}

successfullyLoadedSite:将传递的站点数据加载到视图中并将其显示给用户。注意,多个站点的数据显示在同一个屏幕上。

我想要发生的事情:--我希望每个站点的数据在加载时出现在屏幕上,而不必等到所有这些站点完成加载才能刷新视图。

正在发生的事情:中的一个站点加载并显示,然后我必须等待所有其他站点加载,然后所有其他站点立即显示。

从控制台日志记录可以看出,一旦第一次在主队列上调用successfullyLoadedSite:,所有内容都会在主队列上运行。一旦主队列上的第一个successfullyLoadedSite:被调用,它就会将所有站点加载到对象中,然后将它们加载到视图中。

有什么好主意吗?如果你不知道我是多线程新手。谢谢:)

编辑:,我创建了这样的backgroundQueue

代码语言:javascript
复制
dispatch_queue_t backgroundQueue;

init

代码语言:javascript
复制
backgroundQueue = dispatch_queue_create("uni.que.identifier.bgqueue", NULL);

并在dealloc中发布它:

代码语言:javascript
复制
dispatch_release(backgroundQueue);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-06 05:47:16

使用dispatch_queue_create函数创建的队列是串行队列,然后dispatch_queue_create提交的块按顺序执行。

用途:

代码语言:javascript
复制
dispatch_queue_t backgroundQueue =
    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10039271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档