在我的应用中,我希望使用Websocket协议实现多次上传和下载。
为此目的,我创建了一个名为Engine
,Upload
和Download
Engine
- 创建operationQueue
,maximumConcurrentOperation
为3。
Upload
和Download
- NSOperation
的子类,并覆盖main
方法。在main
方法中,该类都具有以下语句
Engine.m
-(id)init
{
if(self = [super init])
{
opQueue = [[NSOperationQueue alloc] init];
opQueue.maximumConcurrentOperationCount = 3 ;
}
}
-(void)startUploadWithPath:(NSString *)file
{
Upload *up = [[Upload alloc] initWithPath:file];
[opQueue addOperation:up];
}
-(void)startDownloadWithPath:(NSString *)file
{
Download *down = [[Upload alloc] initWithPath:file];
[opQueue addOperation:down];
}
Upload.m and Download.m
-(void)main
{
//start transfering data to server
while(workCompleted != YES)
{
// wait()
}
// when work completed
//insertIntoDB();
}
问题:当我尝试上传第一个视频时,它运行正常。如果我尝试上传第二个视频,那么它也可以正常工作。当我尝试上传第三个视频时(即当我从图库中选择视频并且视频压缩尚未开始)时,应用程序冻结。只有当前两个视频上传中的一个完成后,该应用程序才会激活。
为什么即使maxConcurrentOperationCount
为3,应用程序也会冻结?
提前致谢。
答案 0 :(得分:0)
尝试并行上传视频,例如:
[NSThread detachNewThreadSelector:@selector(inParallel) toTarget:self withObject:nil];
...
-(void)inParallel {
NSLog(@"occurs in parallel");
}
这不应该冻结用户界面,但值得尝试