Iphone 为NSOperationQueue设置并发操作只会导致该操作数
MyI有一个NSOperationQueue,其中包含NSOperation对象Iphone 为NSOperationQueue设置并发操作只会导致该操作数,iphone,ios,multithreading,nsoperation,nsoperationqueue,Iphone,Ios,Multithreading,Nsoperation,Nsoperationqueue,MyI有一个NSOperationQueue,其中包含NSOperation对象 NSOperationQueue *aQueue = [[ NSOperationQueue alloc ] init]; [aQueue setMaxConcurrentOperationCount:3]; for (int index=0; index<=5; index++) { MYOperation *anOperation = [[MYOperation alloc] init];//M
NSOperationQueue *aQueue = [[ NSOperationQueue alloc ] init];
[aQueue setMaxConcurrentOperationCount:3];
for (int index=0; index<=5; index++) {
MYOperation *anOperation = [[MYOperation alloc] init];//MYOperation subclass from NSOperation
[aQueue addOperation:anOperation];
}
NSLog(@"Number of Operations:%d",[aQueue operationCount]);//It gives 5 count
NSOperationQueue*aQueue=[[NSOperationQueue alloc]init];
[aQueue setMaxConcurrentOperationCount:3];
for(int index=0;indexNSOperationQueue
管理线程在后台执行提交的操作。(从10.6开始使用Grand Central Dispatch)。默认情况下,提交的操作在辅助线程上执行。
提交一批操作后,您将立即查询操作队列-此时,队列可能尚未开始执行操作,因此正确报告的操作总数为6。
如果在查询队列之前添加一些延迟,则队列可能已完成所有操作并报告计数0
示例代码:
NSOperationQueue *aQueue = [[ NSOperationQueue alloc ] init];
[aQueue setMaxConcurrentOperationCount:3];
for (int index=0; index<=5; index++) {
MYOperation *anOperation = [[MYOperation alloc] init];//MYOperation subclass from NSOperation
[aQueue addOperation:anOperation];
}
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSLog(@"Number of Operations:%d",[aQueue operationCount]);//It gives 5 count
});
NSOperationQueue*aQueue=[[NSOperationQueue alloc]init];
[aQueue setMaxConcurrentOperationCount:3];
对于(int指数=0;index@MikePollard,为什么队列丢弃的操作多于其并发值?下面是类文档中的一些内容:NSOperation类是一个抽象类,用于封装与单个任务关联的代码和数据
。您不能直接使用NSOperation
类,必须重写设置它并设置它将运行的一些操作。第四个操作被丢弃的证据在哪里?第五个和第六个操作的作用是什么?如果可能,还显示MyOperation
的源代码,并确保操作完成(如果它们是并发的,则在它们完成时设置isFinished
,否则它们将继续阻塞队列)。