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];
}
漂亮男人2017-05-02 09:36:17
정보가 완전하지 않아 이유를 판단하기 어렵지만 이 경우에는 for 루프를 내부에 배치해야 합니다
또한 리소스에 액세스할 때 잠금을 추가해야 합니다
大家讲道理2017-05-02 09:36:17
코드와 로그가 불완전하고 이유를 알 수 없습니다. 두 가지 이유를 추측해 보세요:
실제로는 여전히 작동하지만 디버깅 문제로 인해 상태를 파악할 수 없습니다
정말 중단되었습니다. 구체적인 이유는 심층 조사가 필요하지만, 그렇다면 대기열을 로컬 변수로 사용하는 대신 오랫동안 보관하는 것이 좋습니다. 지역 변수, 직렬 대기열을 만드는 이유는 무엇입니까?