1

我是Objective C的新手,我遇到了以下问题:

-(void) funcA
{
   // array is NSMutableArray within class definition and initialised at alloc method
   [array setLength:0];
   ...    
   // make search and delegate itself for callback to funcB
}

-(void)  funcB:(NSData*) data 
{
    [array: appendData:data];
}

(void) funcC
{
      //Finished collecting data
      //Signal caller for funcA that all data is received.
}

这个想法是调用 funcA 以连接到服务器,该服务器通过调用 funcB 多次附加数据,然后在发送所有数据时最后调用 funcC。还行吧。

我遇到的问题是 funcA 可以被多次调用,这导致数组在处理旧请求的过程中将被设置为长度 0。

现在我已经尝试了 funcA 中的 [NSLock lock] 和 funcC 中的 [NSLock unlock] 但是第二个请求上的 lock 调用造成了死锁。我了解同步是解决此问题的另一种方法,但我只看到函数中的块。

我通常用 C 编程,我会使用 pthread_mutex 但我想一直坚持使用 obj C。假设它们是不同的线程,但似乎它们不是(因为死锁)。

我怎么解决这个问题?

谢谢。印地

4

1 回答 1

4

我相信您只是在寻找可重入锁。pthread_mutex默认情况下不是递归的,而是作为一个选项@synchronized是递归的。NSLock不是。

如果这是您的需要,您可以使用NSRecursiveLock.

于 2012-04-05T17:39:09.553 回答