0

简单的问题:如果我这样做会发生什么:

- (void)viewDidLoad
{
    [self performSelectorInBackground:@selector(myBGMethod) withObject:nil];
}

-(void)myBGMethod
{
    [self myOtherMethod];
}

-(void)myOtherMethod
{
    NSLog(@"This is not Inception");
    //some more code here
}

NSLog()和其他代码会myOtherMethod在主线程还是后台运行?

4

3 回答 3

1

它将在后台运行。一旦你在另一个线程中调用了 myBGMethod,无论它调用什么都在同一个线程上进行,除非它特别请求另一个线程。

附带说明一下,根据您想要支持的 iOS 版本,您可能想了解更多关于Grand Central Dispatch的信息。它使多线程更简单。

于 2012-09-19T11:37:49.040 回答
1

它将在后台线程中运行。

NSLog您可以通过在所有方法中调用来确认这一点。默认情况下,NSLog沿进程 ID (pid) 打印线程号。

于 2012-09-19T11:38:08.377 回答
1

如果您对特定代码行在哪个线程上执行感到好奇,您可以在该行上放置一个断点并检查 Xcode 中的 Debug Navigator 窗格:

在此处输入图像描述

在这种情况下,我在NSLog(...)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"HI!");
});

你可以看到我们在线程 2com.apple.root.default-priority

于 2012-09-19T11:44:33.623 回答