如何在ios中停止发送?

时间:2014-09-11 12:28:54

标签: ios grand-central-dispatch dispatch

当我点击导航栏中的后退按钮时,我想知道停止异步任务的方法。我已经完成了这段代码,但它没有工作...... dispatch_group_t imageQueue = dispatch_group_create();

dispatch_group_async(imageQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
                     ^{
                         imagedata=[[NSMutableArray alloc]init];

                         for (int i=0; i<[imageURL count]; i++)
                         {
                             NSLog(@"clicked ");

                           [imagedata addObject:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[imageURL objectAtIndex:i]]]]];

 [[NSNotificationCenter defaultCenter] postNotificationName:@"Avatardownloaded" object:imagedata   userInfo:nil];
                             }




                     });

在viewdisappear ....

-(void)viewDidDisappear:(BOOL)animated
{
    dispatch_suspend(imageQueue);

    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"Avatardownloaded" object:nil];
    [[NSNotificationCenter defaultCenter]release];
    [avatarimages release];
    [imagedata release];
    [imageURL release];   
}

即使我暂停线程,它也不会停止执行它在后台运行的keepon.Anyone请帮助我

4 个答案:

答案 0 :(得分:4)

Grand Central Dispatch适用于即发即弃的任务。如果您想要可取消的任务,我建议您使用NSOperationNSOperationQueue

答案 1 :(得分:1)

不,你不能这样做。改为使用NSTimer。

答案 2 :(得分:1)

dispatch_queue不支持取消。但是,您可以使用块变量或某个全局变量来跟踪dispatch_queue代码中的可取消。 dispatch_queue中的代码必须能够在cancel = YES(例如)时停止工作。

答案 3 :(得分:0)

有dispatch_suspend()等设施(以及dispatch_resume())。这样可以防止对特定队列中的任何新块进行调度。它不会对已经运行的块产生任何影响。如果要暂停已调度并正在运行的块,则需要使用代码检查某些条件并暂停。要暂停队列/取消操作,您应该使用NSOperation和NSOperationQueue而不是GCD。