Iphone什么时候操作队列线程真的开始?

时间:2011-05-25 13:59:42

标签: iphone multithreading cocoa-touch

尝试看起来像这样的代码时,主要用于测试


NSInvocationOperation *operation = [NSInvocationOperation alloc];
operation = [operation initWithTarget:self 
                             selector:@selector(dosignup:) 
                               object:params];   

while ( ![operation isFinished] ) [NSThread sleepForTimeInterval:0.1];

[operation release];

dosignup永远不会被调用。那么我必须假设选择器不会被调用,直到主线程处理它,而不是在队列插入时像fork和/或.NET上的线程...无论如何强制队列处理线程?


2 个答案:

答案 0 :(得分:2)

您必须将您的操作添加到NSOperationQueue,否则您必须手动启动它。

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(dosignup:) object:params];
[queue addOperation:operation];
[operation release];

[queue release];

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(dosignup:) object:params];
[operation start];

但我不知道你真正想做什么,因为你的代码现在才有点意义。

答案 1 :(得分:0)

您需要致电[operation start]才能执行。请注意NSInvocationOperation是非并发的,因此它将同步执行而不会产生一个线程。这意味着您当前的实现大致等于此代码:

[self dosignup:params];