在iOS 6中,dispatch_get_current_queue被弃用,如何延迟Objective-C方法?

3

目前我正在使用 dispatch_after()dispatch_get_current_queue() 来延迟方法。例如,延迟1秒:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
        [self someMethod];
    });

由于从iOS 6开始,dispatch_get_current_queue()已被弃用,是否有其他等效的方法可以在不创建另一个分离方法的情况下执行performSelector:withObject:afterDelay:

类似的问题在这里,但仍然使用过时的方式。谢谢!

编辑:

来自Peter Segerblom的答案:

// Without updating UI
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"Hello World");
});

// updating UI    
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    [imageView setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:imageView];
});

干杯!

1个回答

8

我认为你应该使用dispatch_get_global_queue()代替。我想它应该能做到同样的事情。如果你只是想延迟方法而不在另一个队列中运行,你可以使用dispatch_get_main_queue()。只要记得如果不在主队列中,不能更新用户界面。


1
谢谢,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)dispatch_get_main_queue() 都完美地工作。 - EES

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接