我使用以下代码进行操作。问题是所有三个任务都是串行运行的。我可以做什么来使任务并行运行。我尝试实现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;
}
答案 0 :(得分:2)
currentQueue
正在返回主队列,这是一个在主runloop上执行的串行队列。您应该创建自己的NSOperationQueue
以同时运行操作。
答案 1 :(得分:0)
NSOperationQueue
根据各种因素管理操作次数。这是一个您无法实现的实现细节。你不能强迫它同时执行操作。
您可以拥有的唯一影响是设置操作依赖性,这会影响连续执行操作的顺序(这对您没什么用处!)
从currentQueue
外部调用nil
时,NSOperation
也会返回mainQueue
。如果您使用{{1}},那么您将获得始终在主线程上运行的队列,并且只在一个位置运行一个操作。您需要创建一个新队列。