为什么我的NSOperationQueue在iOS 4.0中表现不正常?

时间:2010-10-21 12:14:07

标签: iphone nsoperation nsoperationqueue

我之前在iPhone OS 3.0中使用过我的iPhone应用程序中的NSOperationQueue,但现在在iOS 4.0中,代码无法正常工作。它只运行一次,在所有后续调用中,它不起作用。 iOS 4.0中的NSOperationQueue是否有变化?

相关代码如下:

   - (void) starteffectFunction {

        NSOperationQueue *queue = [NSOperationQueue new];
        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(starteffectProcessing)
                                                                                  object:nil];

        [queue addOperation:operation];
        [operation release];
        [queue release];
        [spinner startAnimating];
}

    -(void) starteffectProcessing{
    some code executes. code snippet. A 
    ......
    this code is note supposed to execute before A completes. But this executes before A.
    }

1 个答案:

答案 0 :(得分:2)

您正在创建NSOperationQueue,向其添加操作,然后释放队列。这不是NSOperationQueues的设计工作方式。 NSOperationQueue应该保留,并根据需要向其添加操作。

这可能是失败的,因为您在有机会为您的操作触发线程之前释放NSOperationQueue。也许在较旧的操作系统版本上,由于某些时间错误,它只能做到这一点。

我建议您在第一次需要时或在控制器对象的初始化中分配效果处理队列,然后将该队列保留为控制器对象的实例变量。此队列将与控制器对象同时取消分配,但您可能希望取消当时的所有当前操作并使用NSOperationQueue的–waitUntilAllOperationsAreFinished方法确保在重新分配之前完成所有工作。