我是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],但是第二次请求的锁定调用会导致死锁。我理解同步是解决这个问题的另一种方法,但我只看到了函数中的块。
我通常使用C编程,我会使用pthread_mutex,但我想坚持使用obj C.假设它们是不同的线程,但似乎它们不是(因为死锁)。
我该如何解决这个问题?
感谢。 印
答案 0 :(得分:4)
我相信你只是在寻找一个可重入的锁。默认情况下,pthread_mutex
不是递归的,而是选项。 @synchronized
是递归的。 NSLock
不是。
如果您需要,可以使用NSRecursiveLock
。