在iOS编程中经常会用到线程,线程主要的工作是把影响UI界面的操作放进去,与UI操作可以异步进行。比如读写文件操作,下载操作,图像处理等费时间的操作就可以放在线程中。
先看一段程序。
-(void)createSearchThread
{
//创建线程开始,一一版把优先级不是要求特别高的线程属性设置为:DISPATCH_QUEUE_PRIORITY_DEFAULT
//创建线程开始,一一版把优先级比较高的线程属性设置为:DISPATCH_QUEUE_PRIORITY_HIGH
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
NSString *searchWordTrim=[globeSearchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString *lowerStr = [searchWordTrim lowercaseStringWithLocale:[NSLocale currentLocale]];
//这是一段创建搜索的代码,县创建收缩关键字
//NSLog(@"\n createSearchThread lowerStr:%@",lowerStr);
searchFileIndex=[self getFileIndexFromWordIndexTable:lowerStr];//从查询表中读取带有关键字的文件索引
//NSLog(@"\n searchFileIndex=%d,searchParaIndex=%d",searchFileIndex,searchParaIndex);
if(-1!=searchFileIndex)//表示索引存在
{
//show in the view
dispatch_async(dispatch_get_main_queue(),
^{
[self stop];//停止语音播放
[self initVoice];//初始化语音
BOOL fileChanged=NO;
//设一个文件没有变化的初值
if(fileIndex!=searchFileIndex)
{//如果当前文件索引与查询出的文件索引不一致
fileChanged=YES;//文件变化标志
}
paraIndex=searchParaIndex;
//当前段索引要刷新
fileIndex=searchFileIndex;
//当前文件索引刷新
if(fileChanged)
{
NSString *currDocFileName=[localCfg getFileNameWithMenuIndex:menuIndex AndUrlIndex:fileIndex];//根据新的文件索引获取文件名称
//NSLog(@"-----Detail Doc File name is :%@\n",currDocFileName);
contentStr=[ops readFromFile:currDocFileName];//读取文件内容
//NSLog(@"\n--------contentStr-----\n%@",contentStr);
paraArray=[contentStr componentsSeparatedByString:@"::"];//分割文件内容
paraNum=(int)paraArray.count;
[stateData setFileIndex:fileIndex withRowNum:menuIndex];
}
[stateData setParaIndex:paraIndex withFileIndex:fileIndex];//保存文件的状态到状态标
manual_operate=YES;//注明这是一次手动操作
[self showDocPara:paraIndex];//显示内容
searchParaIndex=-1;//恢复文件查完状态
searchFileIndex=-1;
});
}
else
{
//globeSearchText//如果本地不存在,则搜索Web数据
[self webSearchAction:globeSearchText];
}
});// 查询线程结束。
}