iPhone UIActivityIndi​​cator线程帮助!

时间:2010-09-26 18:43:57

标签: iphone multithreading

我想在我的主委托中创建一个通用线程,我可以用它来显示UIActivityIndi​​cator。我有几个视图将新视图推送到堆栈。大多数视图都是从调用视图中的didSelectRow方法调用的。当他们在UITableView中选择一行时,我想启动Activity Indicator并将新视图推送到堆栈。在新视图的viewDidLoad方法中,我使用Json对服务器进行了多次调用,这可能需要一些时间来处理。  从view1显示活动指示器的最佳方法是什么,并在处理完成后将其隐藏在view2中?

我是否梦想我可以在我的主代表中制作两种方法?

并从view1调用[startIndicator],这将在所有视图的顶部显示活动指标。

并在处理了隐藏活动指示符的viewDidLoad方法之后从view2调用[stopIndicator]

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

是的,你可以,只需确保在主线程上调用任何UIKit例程。你可以通过编写如下例程来使它更“线程友好”:

-(void)startIndicator {
    if ([NSThread isMainThread] == FALSE) {
       [self performSelectorOnMainThread:@selector(startIndicator) withObject:nil waitUntilDone:NO];
       return;
    }

    /* Actual UIIndicator setup */
}

如果您有多个线程可能启动或停止指示器,您可能还需要向例程添加引用计数,每次某些线程调用“start”时递增,并在它们调用“stop”时递减,然后保持激活指示器直到“停止”呼叫将计数减少到零。