1

我正在使用以下代码进行nsoperation。问题是所有三个任务都串行运行。我该怎么做才能使任务并行运行。我尝试实现 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将返回。如果您使用,那么您将获得始终在主线程上运行并且仅一次运行一项操作的队列。您需要创建一个新队列。nilNSOperationmainQueue

于 2012-11-26T12:47:48.997 回答