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 }); } });