私のアプリでは、Websocket プロトコルを使用して複数のアップロードとダウンロードを実現したいと考えています。
そのために、 というクラスを作りましEngine
たUpload
。Download
Engine
- を作成しoperationQueue
、maximumConcurrentOperation
は 3 です。
Upload
and 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
ですか?
前もって感謝します。