2

目前,我遇到了一个似乎是阻止我的代码继续运行的锁定问题。我怀疑问题是基于 @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];

}
4

1 回答 1

0

经过一些额外的测试,锁似乎没有遵循预定的选择器。我上面遇到的问题是由于线程死亡并且未启动预定的选择器引起的。

于 2013-01-22T07:54:56.050 回答