0

我想开始一个持续几分钟的计算任务。由于随着时间的推移解越来越接近最优解,我想给用户一个按钮来随时停止计算并坚持使用近似值。

但是,当我在 viewDidLoad 中开始计算时,在计算结束之前,甚至不会向用户显示带有停止按钮的视图。所以我需要某种后台计算过程——但我如何在 iOS 5 上做到这一点?

我还希望能够在我的视图中更新进度条(使用停止按钮)。

这是我在 UIViewController 子类中的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // doing some initialization

    [self startCalculation]; // do this in background for stopping capabilities?
}

- (void)startCalculation {
    // start calculation and update progress bar every 200 ms or so
}

有人可以帮我吗?

4

2 回答 2

1

一般的答案是startCalculation从内部调用NSThread

//thread is a property in your corrent class
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(startCalculation) object:nil];

然后停止它

//when you want to stop the thread
[thread cancel];

如果您想从该线程中更新进度视图,请确保从 ui 主线程调用进度更新,如下所示

//in your calculation function, when you want to update the progressview
- (void)startGenerationProcess {
    //Calculations

    //update progress
    dispatch_async(dispatch_get_main_queue(), ^{
          //Update progress
    });

    //More Calculations
}
于 2012-06-24T13:32:39.050 回答
0

查看NSThread类或NSOperation的文档。

于 2012-06-24T13:33:09.020 回答