首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iphone ios在单独的线程中运行

iphone ios在单独的线程中运行
EN

Stack Overflow用户
提问于 2010-10-06 10:54:45
回答 4查看 70.9K关注 0票数 96

在单独的线程上运行代码的最佳方式是什么?是不是:

代码语言:javascript
复制
[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];

或者:

代码语言:javascript
复制
    NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(doStuff:)
                                                                          object:nil;
[queue addOperation:operation];
[operation release];
[queue release];

我一直在使用第二种方法,但我一直在阅读的Wesley Cookbook使用了第一种方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-06 11:40:45

在我看来,最好的方法是使用GCD调度,也就是中央调度(GCD)。它限制你使用iOS 4或更高版本,但它非常简单易用。在后台线程上执行一些处理,然后在主运行循环中对结果执行某些操作的代码非常简单和紧凑:

代码语言:javascript
复制
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // Add code here to do background processing
    //
    //
    dispatch_async( dispatch_get_main_queue(), ^{
        // Add code here to update the UI/send notifications based on the
        // results of the background processing
    });
});

如果您还没有这样做,请在libdispatch/GCD/block上查看WWDC 2010的视频。

票数 244
EN

Stack Overflow用户

发布于 2015-03-25 16:36:23

在iOS中多线程的最好方法是使用GCD (中央调度中心)。

代码语言:javascript
复制
//creates a queue.

dispatch_queue_t myQueue = dispatch_queue_create("unique_queue_name", NULL);

dispatch_async(myQueue, ^{
    //stuffs to do in background thread
    dispatch_async(dispatch_get_main_queue(), ^{
    //stuffs to do in foreground thread, mostly UI updates
    });
});
票数 1
EN

Stack Overflow用户

发布于 2015-04-16 11:32:30

我会尝试人们发布的所有技术,看看哪种最快,但我认为这是最好的方法。

代码语言:javascript
复制
[self performSelectorInBackground:@selector(BackgroundMethod) withObject:nil];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3869217

复制
相关文章

相似问题

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