Rumah  >  Soal Jawab  >  teks badan

objective-c - GCDAsyncsocket 放到子线程总会不不执行,这是怎么回事

GCDAsyncsocket 使用异步串行子线程中for循环执行一半就不执行了,代码如下,过程是点击发送按钮返回到主页面,然后异步执行下面的代码上传图片;

    
    - (void)sendAction{
      dispatch_queue_t queue = dispatch_queue_create("uploadImage", DISPATCH_QUEUE_SERIAL);
         dispatch_async(queue, ^{
       for (int i =0; i < 10; i++) {
              
         NSLog(@"async ------------ %@", [NSThread currentThread]);
        
        //第一张图的资源
        PHAsset *asset = self.sendImageArray[i];
        NSString *fileType;
        NSString *fileName;
      
        if (asset.mediaType == PHAssetMediaTypeImage) {
            fileType = @"jpg";
            NSData *data = [NSData dataWithContentsOfFile:filePath[i]];

            [self upLoadImageData:data type:@"jpg" name:fileName];
        } else if(asset.mediaType == PHAssetMediaTypeVideo) {
            fileType = @"mp4";
              NSData *data = [NSData dataWithContentsOfFile:filePath[i]];
            [self uploadMp4Data:data type:fileType name:fileName];
            
        }       
  }
  });
  }
  
  - (void)upLoadImageData:(NSData*)data  type:(NSString *)fileType name:(NSString *)fileName{
     dataNameMutStr = [NSMutableString stringWithFormat:@"ios_%@_%@.jpg\n", @"图片",fileName];
   NSData *dataName = [dataNameMutStr dataUsingEncoding:NSUTF8StringEncoding];
   [self sendSocket:dataName data:data];
   }
   
   
   - (void)sendSocket:(NSData *)dataName data:(NSData *)datas{
     [self createClientTcpSocket];//发图片
     [_asyncsocket writeData:datas withTimeout:-1 tag:0];

   }
过去多啦不再A梦过去多啦不再A梦2705 hari yang lalu540

membalas semua(2)saya akan balas

  • 漂亮男人

    漂亮男人2017-05-02 09:36:17

    Maklumat itu tidak lengkap dan sukar untuk menilai sebabnya, tetapi dalam kes ini, gelung for harus diletakkan di dalam
    Selain itu, kunci harus ditambah apabila mengakses sumber

    dispatch_async(queue, ^{
        for (int i =0; i < 10; i++) {
            // upload ....
        }
    })

    balas
    0
  • 大家讲道理

    大家讲道理2017-05-02 09:36:17

    Kod dan log tidak lengkap dan saya tidak faham sebabnya. Teka dua sebab:

    1. Malah, ia masih berfungsi, tetapi anda tidak dapat menangkap status kerana isu penyahpepijatan

    2. Ia benar-benar terganggu Sebab khusus perlu disiasat secara terperinci Walau bagaimanapun, anda disyorkan untuk menggunakan baris gilir sebagai rujukan dan menahannya untuk masa yang lama dan bukannya sebagai pembolehubah setempat pembolehubah tempatan, apakah gunanya membuat baris gilir bersiri?

    balas
    0
  • Batalbalas