2

我有一个NSOperationQueue,其中有许多NSOperations。我想确保代码的特定部分不是并行执行的。我使用的是NSLock对象是这样的:NSOperation不产生新的线程?

[myLock lock] 
some critical code 
[myLock unlock] 

不幸的是,而不是阻塞的 “锁定” 叫我收到以下错误:

- [NSLock锁]:死锁( '(空)')

经过一番调查后,我发现所有的NSOperations似乎都运行在同一个线程中。我画了这个结论与记录线程ID后:

NSLog(@"Thread %@\n", self, [NSThread currentThread]); 

所有操作似乎在同一个线程中运行。即使它们作为操作并行运行。

这有道理吗?我有点困惑。我想念什么?你看到与NSOperation和NSLock一起使用有什么问题吗? (如果没有,那么我相信错误是在我的代码中)

+1

你能发表更多的意见?更多上下文?另外,这是在Mac OS X或iOS? – 2010-11-26 23:06:32

回答

4

我解决了它。我在下面使用ASIHTTPRequest。显然,除非你覆盖“+(NSThread *)threadForRequest:(ASIHTTPRequest *)请求”,否则所有的HTTP调用都是在同一个线程中进行的。

对不起。

+0

mhh。我如何表明这个问题现在得到了解答?我不能删除这个问题,也不能接受我自己的答案。 :-( – 2010-11-27 00:08:11