Iphone 如何停止调度队列
我正在使用Dispatch Queue加载图像,但如果我不希望队列在某个点加载所有图像,我不知道如何停止队列Iphone 如何停止调度队列,iphone,multithreading,ios5,grand-central-dispatch,dispatch,Iphone,Multithreading,Ios5,Grand Central Dispatch,Dispatch,我正在使用Dispatch Queue加载图像,但如果我不希望队列在某个点加载所有图像,我不知道如何停止队列 - (void) loadImageInBackgroundArr1:(NSMutableArray *)urlAndTagReference { myQueue1 = dispatch_queue_create("com.razeware.imagegrabber.bgqueue", NULL); for (int seriesCount = 0; se
- (void) loadImageInBackgroundArr1:(NSMutableArray *)urlAndTagReference {
myQueue1 = dispatch_queue_create("com.razeware.imagegrabber.bgqueue", NULL);
for (int seriesCount = 0; seriesCount <[seriesIDArr count]; seriesCount++) {
for (int i = 0; i < [urlAndTagReference count]; i++) {
dispatch_async(myQueue1, ^(void) {
NSData *data0 = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:[urlAndTagReference objectAtIndex:i]]];
UIImage *image = [[UIImage alloc]initWithData:data0];
dispatch_sync(dispatch_get_main_queue(), ^(void) {
for (UIView * view in [OD_ImagesScrollView subviews]) {
if ([view isKindOfClass:[UIView class]]) {
for (id btn in [view subviews]) {
if ([btn isKindOfClass:[UIButton class]]) {
UIButton *imagesBtn = (UIButton *)btn;
for (UIActivityIndicatorView *view in [imagesBtn subviews]) {
if ([view isKindOfClass:[UIActivityIndicatorView class]]) {
if (imagesBtn.tag == seriesCount*100+100+i) {
if (view.tag == seriesCount*100+100+i) {
[imagesBtn setImage:image forState:UIControlStateNormal];
[view stopAnimating];
[view removeFromSuperview];
view = nil;
imagesBtn = nil;
}
}
}
}
}
}
}
}
});
[image release];
image = nil;
[data0 release];
data0 = nil;
});
}
}
}
-(void)loadImageInBackgroundArr1:(NSMutableArray*)urlAndTagReference{
myQueue1=dispatch\u queue\u create(“com.razeware.imagegrabber.bgqueue”,NULL);
对于(int seriescont=0;seriescont调度队列不支持取消。两个明显的选项:
将您自己的取消标志保留为实例变量,并使块在继续工作之前检查该标志。所有块最终都将运行,但设置取消标志后运行的块将很快返回
使用NSOperationQueue
而不是调度队列。如果在操作开始运行之前取消该操作,则该操作将根本不会运行。如果该操作已在运行,则不会中断,但您可以让它检查其isCancelled
标志并提前返回