在主线程上启动进程之前启动微调器?

时间:2011-01-10 04:59:37

标签: iphone objective-c multithreading cocoa-touch

我有这个方法:

-(IBAction)clickedDone; {
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    spinner.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2);
    [spinner startAnimating];

    //intensive stuff here
}

然而,微调器没有时间(我推测)在密集的东西之后开始,这阻塞了主线程我猜。我想知道在线程被阻止之前是否有办法让这个微调器动画化。重构我的代码以在分离的线程中运行“密集的东西”是太多的工作。我能想到的唯一选择是将“密集的东西”延迟几分之一秒,以便微调器启动。

你们都在想什么?

3 个答案:

答案 0 :(得分:3)

我认为你需要把昂贵的东西放在第二个线程上。否则你就像你说的那样阻止了界面。这可能是更多的工作,但这比糟糕的用户体验更好。

答案 1 :(得分:2)

如果主线程未被阻止,则微调器只能旋转。因此,您必须在不同的线程上运行“密集的东西”。此外,为了延迟“密集的东西”,你必须将它添加到线程的操作队列,允许运行循环重新开始。如果您已经在计划中,那么您可以将其放在不同的主题上。

答案 2 :(得分:1)

首先,您需要将其添加到视图中:

[self.view addSubview:spinner];

也许这已经解决了问题。