0

以前は iPhone OS 3.0 の iPhone アプリで NSOperationQueue を使用していましたが、iOS 4.0 ではコードが正しく機能しません。一度だけ正しく実行され、その後のすべての呼び出しでは機能しません。iOS 4.0 の NSOperationQueue に変更はありますか?

関連するコードは次のとおりです。

   - (void) starteffectFunction {

        NSOperationQueue *queue = [NSOperationQueue new];
        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(starteffectProcessing)
                                                                                  object:nil];

        [queue addOperation:operation];
        [operation release];
        [queue release];
        [spinner startAnimating];
}

    -(void) starteffectProcessing{
    some code executes. code snippet. A 
    ......
    this code is note supposed to execute before A completes. But this executes before A.
    }
4

1 に答える 1

2

NSOperationQueue を作成し、それに操作を追加してから、キューを解放しています。これは、NSOperationQueues が機能するように設計された方法ではありません。NSOperationQueue は、必要に応じて操作を追加して永続化することになっています。

操作のスレッドを起動する前に NSOperationQueue の割り当てを解除しているため、これはおそらく失敗しています。おそらく、古い OS バージョンでは、タイミングの癖が原因でこれを行うことができました。

最初に必要になったとき、またはコントローラー オブジェクトの初期化時に効果処理キューを割り当て、そのキューをコントローラー オブジェクトのインスタンス変数として保持することをお勧めします。このキューはコントローラー オブジェクトと同時に割り当て解除されますが、おそらくその時点で現在のすべての操作をキャンセルし、NSOperationQueue の–waitUntilAllOperationsAreFinishedメソッドを使用して、割り当て解除前にすべての作業を完了していることを確認する必要があります。

于 2010-10-21T15:25:28.777 に答える