【问题标题】:iphone - asynchronous upload and download operation freezes the UIiphone - 异步上传和下载操作冻结 UI
【发布时间】:2013-10-22 15:01:44
【问题描述】:

在我的应用中,我想使用Websocket协议实现多次上传和下载。

为此,我创建了名为EngineUploadDownload 的类

Engine - 创建一个 operationQueuemaximumConcurrentOperation 是 3。

UploadDownload - 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,应用程序也会冻结?

提前致谢。

【问题讨论】:

  • 您根本没有发布任何真正的代码,但您提出了 5 个问题,这些问题与您编写的代码的作用极为相关。这些问题中的每一个都应该是关于 SO 的一个完全独立的问题。
  • 好的..我正在删除一些问题

标签: iphone ios nsoperation


【解决方案1】:

尝试并行上传视频,例如:

[NSThread detachNewThreadSelector:@selector(inParallel) toTarget:self withObject:nil];

 ...

-(void)inParallel {

NSLog(@"occurs in parallel");

 }

这不应该冻结 UI,但值得尝试

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多