尝试看起来像这样的代码时,主要用于测试
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上的线程...无论如何强制队列处理线程?
答案 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];