0

私のアプリでは、Websocket プロトコルを使用して複数のアップロードとダウンロードを実現したいと考えています。

そのために、 というクラスを作りましEngineUploadDownload

Engine- を作成しoperationQueuemaximumConcurrentOperationは 3 です。

Uploadand Download- メソッドのサブクラスNSOperationおよびオーバーライドmain。methodでは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();
}

問題: 最初のビデオをアップロードしようとすると、問題なく動作します。すぐに 2 番目のビデオをアップロードしようとすると、問題なく動作します。3 番目のビデオをアップロードしようとすると (つまり、ギャラリーからビデオを選択し、ビデオの圧縮がまだ開始されていない場合)、アプリケーションがフリーズします。アプリケーションは、前の 2 つのビデオ アップロードのうちの 1 つが完了したときにのみアクティブになります。

3であってもアプリケーションがフリーズするのはなぜmaxConcurrentOperationCountですか?

前もって感謝します。

4

1 に答える 1

0

次のように、並行して動画をアップロードしてみてください。

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

 ...

-(void)inParallel {

NSLog(@"occurs in parallel");

 }

これにより UI がフリーズすることはありませんが、試してみる価値はあります

于 2013-10-22T15:09:12.287 に答える