1

nsoperationに次のコードを使用しています。問題は、3つのタスクすべてがシリアルに実行されることです。タスクを並列に実行するにはどうすればよいですか。startメソッドとisconcurrentメソッドを実装しようとしましたが、機能しません。私のuaviewコントローラークラス

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    Store *S=[ [Store alloc] init];
    S.a=25;

    NSOperationQueue *someQueue = [NSOperationQueue currentQueue];

    someQueue.MaxConcurrentOperationCount = 3;

    NSInvocationOperation *invocationOp2 = [[NSInvocationOperation alloc]  initWithTarget:self
                                                                                 selector:@selector(ymain)
                                                                                   object:nil];

    NSInvocationOperation *invocationOp3 = [[NSInvocationOperation alloc]  initWithTarget:self
                                                                                 selector:@selector(ymain2)
                                                                                   object:nil];
    NSInvocationOperation *invocationOp4 = [[NSInvocationOperation alloc]  initWithTarget:self
                                                                                 selector:@selector(ymain3)
                                                                                   object:nil];


    [someQueue addOperation:invocationOp2];
    [someQueue addOperation:invocationOp3];
    [someQueue addOperation:invocationOp4];




}
-(void)ymain
{





    for (int i = 0 ; i < 10000 ; i++) {
        NSLog(@"in the A main");    }
}

これはサブクラス化された他のクラスです

@interface A : NSOperation

@end

@implementation A

bool executing;
bool finished;
-(void)main
{

}
- (BOOL)isConcurrent
{
    return YES;
}

- (BOOL)isReady
{
    return YES;
}
4

2 に答える 2

2

currentQueueはメインキューを返します。メインキューは、メインの実行ループで実行されるシリアルキューです。NSOperationQueue操作を同時に実行するには、独自に作成する必要があります。

于 2012-11-26T13:01:01.243 に答える
0

NSOperationQueueさまざまな要因に応じて操作の数を管理します。これは、実行できない実装の詳細です。強制的に操作を同時に実行することはできません。

あなたが持つことができる唯一の影響は、操作の依存関係を設定することです。これは、操作が連続して実行される順序に影響します(これはあまり役に立ちません!)

また、の外部から呼び出された場合にもcurrentQueue戻ります。を使用すると、常にメインスレッドで実行され、一度に1つの操作のみを実行するキューが取得されます。新しいキューを作成する必要があります。nilNSOperationmainQueue

于 2012-11-26T12:47:48.997 に答える