2
현재 잠금 문제로 보이는 문제로 코드가 계속 실행되지 않는 문제가 있습니다. 문제가 performSelector : @Synchronized 블록이 작동하는 방식에 기반하고 있다고 생각합니다. AfterDelay :. 잠금이 지연을 통해 지속되는지 또는 잠금 외부에서 스케줄 된 선택기입니까?@Background 및 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];
}