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 に答える