performSelector:withObject:afterDelay: - 我可以确定这是在主线程上运行的吗?

时间:2014-10-22 23:08:04

标签: ios multithreading cocoa-touch thread-safety

我正在使用iOS,我希望在主线程上运行导入过程,同时显示进度。我以为我应该使用performSelectorOnMainThread,但这并没有提供' withDelay'参数。我是否可以确定,如果我目前在主线程上,将在主线程上执行以下代码?

- (void)tkContactsMultiPickerController:(TKContactsMultiPickerController *)picker didFinishPickingDataWithInfo:(NSArray *)contacts
{
    [UIApplication sharedApplication].idleTimerDisabled = NO;
    [UIApplication sharedApplication].idleTimerDisabled = YES;

    [SVProgressHUD showWithStatus:[self importingString] maskType:SVProgressHUDMaskTypeBlack];

    [self performSelector:@selector(importContacts:) withObject:contacts afterDelay:.1];
}

1 个答案:

答案 0 :(得分:2)

是。 The documentation明确地说明了这一点:

  

在延迟后使用默认模式在当前线程上调用接收器的方法。

如果您需要从另一个主线程返回主线程,您也可以使用dispatch_after() - 主线程are guaranteed上的任务将在主线程上运行。

相关问题