iOS開発-NSURLConnectionエージェント設定の注意点

3312 ワード

1.メインスレッドでネットワーク要求を開始し、「NSURLConnection connection WithRequest:request delegate:self」を使用してプロキシ方法を設定し、プロキシ方法はデフォルトではメインスレッドで呼び出される。
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123&type=JSON"]];
    
    //    
    //    :           
    NSURLConnection *connect = [NSURLConnection connectionWithRequest:request delegate:self];

    //              
    //[NSOperationQueue alloc]init]]        
    //[NSOperationQueue mainQueue]        
//           
    [connect setDelegateQueue:[[NSOperationQueue alloc]init]];
    //[connect setDelegateQueue:[NSOperationQueue mainQueue]];
    
    NSLog(@"-------");
2.メインスレッドでネットワーク要求を開始し、[NSURLConnection alloc]init WithRequest:request delegate:self startImmeditely:NO]を使ってプロキシを設定し、プロキシ方法はデフォルトではメインスレッドで呼び出される。
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123&type=JSON"]];
    
    //    
    //    :           
    NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];

    //           
    [connect setDelegateQueue:[[NSOperationQueue alloc]init]];
    
    //      
    [connect start];
    NSLog(@"-------");
3.開始ネットワーク要求は、サブスレッドで実行され、「NSURLConnection connection WithRequest:request delegate:self」を使用してプロキシ方法を設定し、プロキシ方法はデフォルトではサブスレッドで呼び出される。
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
      
       NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123&type=JSON"]];
       
       //    
       //    :           !!
       //         connect      source      runloop ,         
       NSURLConnection *connect = [NSURLConnection connectionWithRequest:request delegate:self];
       
       //              ,          ,         
       [connect setDelegateQueue:[[NSOperationQueue alloc]init]];
       
       //[[NSRunLoop currentRunLoop] runMode:UITrackingRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1000]];
       [[NSRunLoop currentRunLoop]run];
       
         NSLog(@"---%@----",[NSThread currentThread]);
   });

4.サブスレッドでネットワーク要求を開始し、[NSURLConnection alloc]init WithRequest:request delegate:self startImmeditely:NO]を使ってプロキシを設定するとともに、プロキシメソッドの実行するスレッド[connect set DelegateQue]を設定する必要がある。
dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123&type=JSON"]];
        
        //    
        //    :           
        NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
        
        
        //              ,          ,         ,  ,       ,         
        [connect setDelegateQueue:[NSOperationQueue mainQueue]];
        
        //      
        //   connect       runloop ,              runloop
        //  :     runloop    ,                   runloop      
        [connect start];
        NSLog(@"---%@----",[NSThread currentThread]);
    });