使用detachNewThreadSelector的组合是什么意思:toTarget:withObject和[NSThread Start]

时间:2011-12-29 06:17:55

标签: objective-c ios multithreading core-foundation

我在方法startThread中使用下面的代码,如果我使用detachNewThreadSelector方法,它会阻止我的UI但是当我用来制作NSThread的对象并调用start方法时我调用了run方法,它没有阻止我的UI。

我没有得到的是detachNewThreadSelector将在后台运行,所以它不应该阻止我的UI。那么为什么我的情况呢?

以及start方法和NSThread对象是什么?它会在后台或主线程中运行吗?

我搜索了很多文章和StackOverFlow问题,但没有得到哪个senario实际上这些Threads锻炼

 -(void)startThread
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        //NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:nil];
        //[myThread start];
        [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:nil];
        [pool release];
    }

-(void)run:(id)param
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    while (threadProgressView.progress < 1) {
        [NSThread sleepForTimeInterval:0.25];
        [self updateProgressBar];
        //[NSThread detachNewThreadSelector:@selector(updateProgressBar) toTarget:self withObject:nil];


    }
    threadStartButton.hidden = NO;
    [pool release];
}
-(void)updateProgressBar
{
    NSLog(@"In update progress bar");
    float actual = [threadProgressView progress];
    threadValueLabel.text = [NSString stringWithFormat:@"%.2f",actual];
    threadProgressView.progress = actual + 0.025;

}

0 个答案:

没有答案