0

我所拥有的是

- (void)startTheBackgroundJob {   
    1.NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    2.[NSThread sleepForTimeInterval:3];
    3.[self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:YES];
    4.//[self makeMyProgressBarMoving];
    5.[pool release];

}

- (void)makeMyProgressBarMoving {

    float actual = [threadProgressView progress];
    threadValueLabel.text = [NSString stringWithFormat:@"%.2f", actual];
    if (actual < 1) {
        threadProgressView.progress = actual + 0.01;
        [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(makeMyProgressBarMoving) userInfo:nil repeats:NO];
    }
    else threadStartButton.hidden = NO;

}

在starTheBackgroundJob的第4行,您可以设置waitUntilDone = YES(或NO)的值。

我阅读了参考资料,他们指出:

等待

一个布尔值,指定当前线程是否阻塞,直到在主线程上的接收器上执行指定的选择器之后。指定 YES 来阻塞这个线程;否则,指定 NO 使该方法立即返回。如果当前线程也是主线程,并且您为此参数指定 YES,则消息将立即传递和处理。

我的问题是:

  1. 这里指定的选择器是什么(在这个例子中)?
  2. 抛开问题。设置时会发生什么waitUntilDone = YES。我试过了,但我根本没有看到任何区别。
4

1 回答 1

0

1) makeMyProgressBarMoving 是您的选择器。2)如果您尝试从另一个线程中的主线程上执行选择器,您只会使用 onMainThread 版本。文档说:

Wait:一个布尔值,指定E当前线程是否阻塞,直到在指定的选择器上在主线程上的接收器上执行。

于 2012-05-14T20:39:05.087 回答