0

我是新手,所以请原谅我的任何错误...

我的情况:

- (id)initWith... //Some arguments

有一个返回对象的初始化方法。用参数的值设置它的实例变量做了很多工作。为了最大限度地提高性能,我将工作分成两个线程。一个线程设置一组相关变量,另一个线程设置另一组变量。

- (id)initWith:arguments {
self = [super init];
if (self) {
[NSThread detachNewThreadSelector:@selector(setFirstSetOfVariables:) toTarget:self withObject:argObject];
[self setSecondSetOfVariables:arguments];
//Check if the thread finished its work and return the value
return self;
}

为了方便起见,认为该方法必须设置的两组 var 没有任何关系。那么我的问题是:如何检查第一个线程是否完成?我可以创建一个 BOOL var,但我必须创建一个循环来检查。我也可以调用一个方法来表示它已经准备好了。但由于我不太了解,我不知道在线程内部调用的方法是在主线程中运行还是在另一个线程中运行。对不起。感谢您提供任何信息。

4

1 回答 1

0

你可以这样做来简化整个事情

ComplicatedObject *myComplicatedObject = [ComplicatedObject alloc] init;

[myComplicatedObject setLongTimeTakingVariables];

并在 ComplicatedObject 中创建一个类似的方法

-(void)setLongTimeTakingVariables{
  dispatch_async(dispatch_get_global_queue(),^{ All of your code can go here. Infact you need not split it into two sections, because it will happen in the background and your userinterface will not get affected }

但是如果你想分裂,那么你可以做

   dispatch_async(dispatch_get_global_queue((DISPATCH_QUEUE_PRIORITY_LOW, 0)),^{  
                   some work here
     }

    dispatch_async(dispatch_get_global_queue((DISPATCH_QUEUE_PRIORITY_LOW, 0)),'{
                    some other work here
    }

阅读并发编程指南,每件事都解释得很清楚。

于 2012-12-08T22:38:15.700 回答