多线程之dispatch_queue_t

本文详细介绍了gcd异步多线程操作的使用流程,包括如何在子线程中处理数据并最终更新主线程界面。通过创建特定的调度队列,实现了数据处理与界面更新的异步分离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://www.cnblogs.com/foxmin/archive/2012/07/27/2612246.html


gcd异步多线程操作使用流程,一般在子线程中处理数据,主线程更新界面

static dispatch_queue_t loadDealersQueue = NULL;
    if (!loadDealersQueue) {
        loadDealersQueue = dispatch_queue_create("com.geelycar.loadactivity.loaddealersqueue", NULL);
    }
    
    dispatch_async(loadDealersQueue, ^{
        @autoreleasepool {
            //Data processing
            dispatch_async(dispatch_get_main_queue(), ^{
            //Update Interface
            });
        }
    
    });


今天又张见识了,看下如下的子线程与主线程的调用


static dispatch_queue_t searchQueue = NULL;
    if( !searchQueue )
        searchQueue = dispatch_queue_create("com.moneytree.searchqueue", NULL);//调度队列
    
//异步运行
    dispatch_async(searchQueue, ^{
        @autoreleasepool {//ARC模式下自动释放池的写法
//数据处理放在队列中
            NSArray *resultData = [[NSArray alloc] initWithArray:[[MTStockManage sharedInstance] stockListMatchingSearchText:searchText fromArray:self.stockList]];            
            self.stockList = resultData;
            [self setTableDataSource:nil];
            
            
            if (resultData.count > SHOW_STOCK_NUMBER) {
                NSRange range = NSMakeRange(0, SHOW_STOCK_NUMBER);
                [self setTableDataSource:[resultData subarrayWithRange:range]];
            }else {
                [self setTableDataSource:resultData];
            }
            
            dispatch_async(dispatch_get_main_queue(), ^{//返回主界面
                [self.dataResultTable reloadData]; //主线程中刷新UI
            });            
        }
    });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值