多并发条件依赖执行 仅供自己参考

+ (void)searchMutableRequest:(NSArray *)urlArray Page:(int)page FMSSigItem:(FMSSigItem *)item CallBack:(FMSearchCallback)callback{
    if (urlArray.count > 0) {
        __block NSInteger requestCount = 0;
        __block NSMutableArray *mutableResult = [NSMutableArray arrayWithCapacity:urlArray.count];
        for (int i = 0; i < urlArray.count; i++) {
            [mutableResult addobject:[NSNull null]];
        }

//        
//        dispatch_group_notify(<#dispatch_group_t group#>,<#dispatch_queue_t queue#>,<#^(void)block#>)
//        
//        dispatch_group_async(<#dispatch_group_t group#>,<#^(void)block#>)
        
        /**
        NSOperation *end = [NSBlockOperation blockOperationWithBlock:^{
            
        }];
        NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
            
        }];
        NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
            
        }];
        [end addDependency:op1];
        [end addDependency:op2];
        
        NSArray *ar =@[end,op1,op2];
        
        [[NSOperationQueue mainQueue] addOperations:ar waitUntilFinished:YES];
        */
        
        
        NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];
        myQueue.maxConcurrentOperationCount = urlArray.count;
        [urlArray enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop) {
            NSDictionary *dic = obj;
            Nsstring *urlStr = [dic objectForKey:@"url"];
            NSURL *url = [NSURL URLWithString:urlStr];
            NSMutableuRLRequest *request = [NSMutableuRLRequest requestWithURL:url];
            [FetchMusicSourceAPI setSearchMutableRequest:request Dic:dic];
    
                [NSURLConnection sendAsynchronousRequest:request queue:myQueue completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError) {
                    if (connectionError) {
                        [FMSShowError showNetError:connectionError];
                        return ;
                    }
                    else{
                        if (data) {
                            Nsstring *resultStr = [[Nsstring alloc] initWithData:data encoding:NSUTF8StringEncoding];
                            if(resultStr){
                                NSLog(@"=====%d",idx);
                                
                                [mutableResult replaceObjectAtIndex:idx withObject:resultStr];
                                NSLog(@"fffff");
                            }
                        }
                    }
                    requestCount++;
                }];
            
        }];

        while (requestCount < urlArray.count)  {
            [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
        }
        
        
        FMSSigItem *parseItem = [FMSSigItem itemWithsourceID:item.sourceID Method:item.method Params:item.params Mode:@"parse" Data:mutableResult];
        [FetchMusicSourceAPI searchParseWithFMSSigItem:parseItem Page:page CallBack:callback];
    }
}

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...