是否建议在 iOS 中的另一个后台线程中启动一个后台线程
is it recommended to start a background thread inside another background thread in iOS
我有以下代码:
-(void) alternateQuestion
{
NSDictionary *dictQuestion=nil;
PMIiSMSQuestionModel *objQuestion=nil;
int iQuestionCount=[arrQuestion count];
for (m_iIndex=0; m_iIndex<iQuestionCount; m_iIndex++){
dictQuestion=[arrQuestion objectAtIndex:m_iIndex];
objQuestion=[[PMIiSMSQuestionModel alloc]init];
[objQuestion setM_strCode: [dictQuestion valueForKey:QUESTION_CODE]];
[objQuestion setM_strText: [dictQuestion valueForKey:QUESTION_TEXT]];
[objQuestion setM_iAnswerType:[((NSString*)[dictQuestion valueForKey:ANSWER_TYPE]) intValue]];
[objQuestion setM_iNumRangeStart: [((NSString*)[dictQuestion valueForKey:NUMBER_RANGE_START]) intValue]];
[objQuestion setM_iNumRangeEnd: [((NSString*)[dictQuestion valueForKey:NUMBER_RANGE_END]) intValue]];
[objQuestion setM_strDtRangeStart: [dictQuestion valueForKey:DATE_RANGE_START]];
[objQuestion setM_strDtRangeEnd: [dictQuestion valueForKey:DATE_RANGE_END]];
[objQuestion setM_strEmptyValue: [dictQuestion valueForKey:EMPTY_VALUE]];
[objQuestion setM_bSkipEmptyValue: [((NSString*)[dictQuestion valueForKey:SKIP_EMPTY_VALUE]) boolValue]];
[objQuestion setM_bIsMandatory:[((NSString*)[dictQuestion valueForKey:IS_MANDATORY]) boolValue]];
[objQuestion setM_iIsReadOnly: [((NSString*)[dictQuestion valueForKey:IS_READONLY]) intValue]];
[objQuestion setM_iHideIfReadOnly:[((NSString*)[dictQuestion valueForKey:HIDE_IF_READONLY]) intValue]];
[objQuestion setM_strDefaultQuestion: [dictQuestion valueForKey:DEFAULT_QUESTION]];
m_strSubCode = [dictQuestion valueForKey:@"SUBJECT_CODE"];
NSString *strTemp=[[NSString alloc]initWithFormat: CALLCARD_GET_QUESTION_QUERY,[self.m_objActiveCallcard m_iFunctionType],
[self.m_objActiveCallcard m_strCode]];
self.m_strQuery=strTemp;
strTemp=nil;
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self verifyQuestions];
//----------
});
}
正如我们所看到的,alternateQuestion 方法已经启动了一个后台 thread.We 也在 alternateQuestion 方法中执行许多任务,该方法当前在主线程上运行。是否建议使用 GCD 在新的后台线程中移动 alternateQuestion 方法,以便嵌套后台线程。
提前致谢。
如果您使用的是 GCD,则启动新任务没有问题。因为对主线程没有影响。
检查这个苹果documentation。
在清单3-4中,使用了嵌套dispatch_async
。
我有以下代码:
-(void) alternateQuestion
{
NSDictionary *dictQuestion=nil;
PMIiSMSQuestionModel *objQuestion=nil;
int iQuestionCount=[arrQuestion count];
for (m_iIndex=0; m_iIndex<iQuestionCount; m_iIndex++){
dictQuestion=[arrQuestion objectAtIndex:m_iIndex];
objQuestion=[[PMIiSMSQuestionModel alloc]init];
[objQuestion setM_strCode: [dictQuestion valueForKey:QUESTION_CODE]];
[objQuestion setM_strText: [dictQuestion valueForKey:QUESTION_TEXT]];
[objQuestion setM_iAnswerType:[((NSString*)[dictQuestion valueForKey:ANSWER_TYPE]) intValue]];
[objQuestion setM_iNumRangeStart: [((NSString*)[dictQuestion valueForKey:NUMBER_RANGE_START]) intValue]];
[objQuestion setM_iNumRangeEnd: [((NSString*)[dictQuestion valueForKey:NUMBER_RANGE_END]) intValue]];
[objQuestion setM_strDtRangeStart: [dictQuestion valueForKey:DATE_RANGE_START]];
[objQuestion setM_strDtRangeEnd: [dictQuestion valueForKey:DATE_RANGE_END]];
[objQuestion setM_strEmptyValue: [dictQuestion valueForKey:EMPTY_VALUE]];
[objQuestion setM_bSkipEmptyValue: [((NSString*)[dictQuestion valueForKey:SKIP_EMPTY_VALUE]) boolValue]];
[objQuestion setM_bIsMandatory:[((NSString*)[dictQuestion valueForKey:IS_MANDATORY]) boolValue]];
[objQuestion setM_iIsReadOnly: [((NSString*)[dictQuestion valueForKey:IS_READONLY]) intValue]];
[objQuestion setM_iHideIfReadOnly:[((NSString*)[dictQuestion valueForKey:HIDE_IF_READONLY]) intValue]];
[objQuestion setM_strDefaultQuestion: [dictQuestion valueForKey:DEFAULT_QUESTION]];
m_strSubCode = [dictQuestion valueForKey:@"SUBJECT_CODE"];
NSString *strTemp=[[NSString alloc]initWithFormat: CALLCARD_GET_QUESTION_QUERY,[self.m_objActiveCallcard m_iFunctionType],
[self.m_objActiveCallcard m_strCode]];
self.m_strQuery=strTemp;
strTemp=nil;
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self verifyQuestions];
//----------
});
}
正如我们所看到的,alternateQuestion 方法已经启动了一个后台 thread.We 也在 alternateQuestion 方法中执行许多任务,该方法当前在主线程上运行。是否建议使用 GCD 在新的后台线程中移动 alternateQuestion 方法,以便嵌套后台线程。
提前致谢。
如果您使用的是 GCD,则启动新任务没有问题。因为对主线程没有影响。
检查这个苹果documentation。
在清单3-4中,使用了嵌套dispatch_async
。