2

这是我在这里的第一个问题,如果我犯了任何错误,请原谅!

在我的 iPhone 项目中,我有一个在线程中运行的方法需要很长时间才能执行(这就是它在线程中运行的原因)。

[NSThread detachNewThreadSelector:@selector(methodToBeCalledInAThread) toTarget:self withObject:nil];

// ...

-(void)methodToBeCalledInAThread {  
    MyClass *myClass = [[MyClass alloc] init];  
    [myClass setDelegate:self]; 
    [myClass veryIntensiveComputing];   
    [myClass release];
}

我的目标是通知调用此方法的 ViewController 此方法中的任何进展。这就是我将 ViewController 设置为类的委托的原因。

现在在昂贵的方法中,我执行以下操作:

if(self.delegate != nil) {
    [self.delegate madeSomeProgress];
}

但不幸的是,这不起作用,因为(我认为)我在后台线程中。

如何通过异步执行的方法通知委托任何更改?

4

1 回答 1

4

试试[self.delegate performSelectorOnMainThread: @selector(madeSomeProgress) withObject: nil waitUntilDone: YES];……

有关详细信息,请参阅文档

这将在主线程上同步执行操作。只要主线程中没有任何东西试图在该辅助线程中执行任何东西,这通常是安全的。

但是,如果您不想在主线程为请求提供服务之前阻止计算,则可以传递 NO 以不等待。如果这样做,那么您还必须担心线程同步。主线程可能不会立即为请求提供服务,当它提供服务时,您的后台线程可能处于变异状态的过程中。

线程很难。

于 2010-09-01T15:19:34.520 回答