是否建议在iOS中的另一个后台线程中启动后台线程

时间:2015-07-24 07:39:26

标签: ios objective-c multithreading grand-central-dispatch

我有以下代码:

    -(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已经启动了后台线程。我们还在alternateQuestion方法中执行许多任务,该方法当前在主线程上运行。是否可以使用GCD在新的后台线程中移动alternateQuestion方法,以便嵌套后台线程。

提前致谢。

2 个答案:

答案 0 :(得分:1)

检查此苹果documentation

在清单3-4中,使用了嵌套的{{1}}。

答案 1 :(得分:0)

如果您正在使用GCD,启动新任务没问题。因为对主线程没有影响。