UIActivityIndicatorViewが動かない。

メソッドの中で、重い処理が合ったので、
MenuViewController.h

@interface MenuViewController : UIViewController {
    UIActivityIndicatorView *indicator;
}
-(void) shori;
@end

MenuViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    indicator.frame = CGRectMake(100.0, 100.0, 50.0, 50.0);
    indicator.center = self.view.center;
    [self.view addSubview:indicator];
}

-(void) shori
{
    [indicator startAnimating];
    /* 重い処理 */
    [indicator stopAnimating];
}

としたが、動かなかった。
google先生に聞いてみた所、同じスレッドで実行しちゃ駄目と言われる。

別スレッドで行うには
performSelectorInBackgroundを使えば良いらしいのだが、引数が一つしかとれない。
しかも、「本スレッドの中でなければUIは操作してはいけない。」との制限付き。

結局、startAnimatingと、stopAnimatingをバックグラウンドで行う事に。

-(void) shori
{
    [self performSelectorInBackground:@selector(indicatorStart) withObject:nil];
    /* 重い処理 */
    [self performSelectorInBackground:@selector(indicatorStop) withObject:nil];
}

-(void) indicatorStart
{
    [indicator startAnimating];
}
-(void) indicatorStop
{
    [indicator stopAnimating];
}