目前我遇到了阻止我的代码继续运行的锁定问题。我怀疑问题是基于@synchronized块与performSelector:AfterDelay:的函数。锁是否在延迟期间持续存在,或者锁定在锁外的选择器?
如果你想看看,这是代码。从本质上讲,locateEvents被多次调用,但实际上只需要经常运行一次,因为新的事件位置数据会进入(即,如果它被不断调用)。
-(void) locateEvents
{
@synchronized(self)
{
if(!locating)
{
locating = true;
shouldLocate = false;
for(Event* e in provider.allEvents)
{
if(e.coordinate.latitude)
[self queueEventForMap:e];
}
[self performSelector:@selector(stopLocating) withObject:nil afterDelay:1.0f];
}else{
shouldLocate = true;
}
}
}
-(void) stopLocating
{
locating = false;
if(shouldLocate)
[self locateEvents];
}
答案 0 :(得分:0)
经过一些额外的测试后,似乎锁定不遵循预定的选择器。我上面遇到的问题是由线程死亡和未启动的预定选择器引起的。