2013-12-09 39 views
3

我正在使用dispatch_after()dispatch_get_current_queue()来延迟此刻的方法。例如,对于1秒的延迟:Objective-C延迟iOS 6中的方法dispatch_get_current_queue已弃用

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

dispatch_get_current_queue()从iOS 6的弃用,是否有任何其他等效的方式来做到这一点,而无需创建用于performSelector:withObject:afterDelay:彼此分离的方法?

类似的问题here但仍使用不推荐的方式。谢谢!

编辑:

从彼得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]; 
}); 

干杯!

回答

8

我认为你应该用dispatch_get_global_queue()来代替。它应该做同样的事情我认为。如果您只想延迟该方法而不想在另一个队列中运行,则可以使用dispatch_get_main_queue()。请记住,如果您不在主查询中,则无法更新用户界面。

+1

谢谢,'dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)'和'dispatch_get_main_queue()'完美地工作。 – siutsin

相关问题